import {Captured} from "./renderer/Captured";

export class MockCapturedContent {

    public static create(): Captured {
        return CAPTURED;
    }

}

// raw captured JSON for testing writing to our archives.
// noinspection TsLint: max-line-length
const CAPTURED: any = {
    "capturedDocuments": {
        "https://journal.artfuldev.com/media/076fa5fbed4eb57c0501fa4cbf5855b3?postId=384ef05f32b2": {
            "content": "<!DOCTYPE html>\n<html><head><base href=\"https://journal.artfuldev.com/media/076fa5fbed4eb57c0501fa4cbf5855b3?postId=384ef05f32b2\"><title>package.v2.json – Medium</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"twitter:widgets:csp\" content=\"on\"><meta name=\"robots\" content=\"noindex\"><style>body {text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-family: \"ff-tisa-web-pro\", Georgia, Cambria, \"Times New Roman\", Times, serif; font-weight: 400; color: #333332; font-size: 18px; line-height: 1.4; margin: 0; background-color: white; overflow: hidden;}iframe {max-width: 100%;}</style></head><body><style>.gist .gist-file { margin-bottom: 0 !important; }.gist { text-rendering: auto; }</style><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/gist-embed-87673c31a5b37b5e6556b63e1081ebbc.css\"><div id=\"gist80462068\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-package-v2-json\" class=\"file\">\n    \n\n  <div itemprop=\"text\" class=\"blob-wrapper data type-json\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tbody><tr>\n        <td id=\"file-package-v2-json-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-package-v2-json-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\"><span class=\"pl-pds\">\"</span>scripts<span class=\"pl-pds\">\"</span></span>: {</td>\n      </tr>\n      <tr>\n        <td id=\"file-package-v2-json-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-package-v2-json-LC2\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>test<span class=\"pl-pds\">\"</span></span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>mocha -r ts-node/register -r ignore-styles src/**/*.spec.ts<span class=\"pl-pds\">\"</span></span></td>\n      </tr>\n      <tr>\n        <td id=\"file-package-v2-json-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-package-v2-json-LC3\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</tbody></table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/artfuldev/3a43f60475736a4b5fa95f20fa8c6dbd/raw/0a66cff05e639b852511e42c490dc37f784e1883/package.v2.json\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/artfuldev/3a43f60475736a4b5fa95f20fa8c6dbd#file-package-v2-json\">package.v2.json</a>\n        hosted with ❤ by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n</body></html>",
            "contentTextLength": 2773,
            "href": "https://journal.artfuldev.com/media/076fa5fbed4eb57c0501fa4cbf5855b3?postId=384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": true
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 2
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "package.v2.json – Medium",
            "url": "https://journal.artfuldev.com/media/076fa5fbed4eb57c0501fa4cbf5855b3?postId=384ef05f32b2"
        },
        "https://journal.artfuldev.com/media/1332267fe1665fafdc8c0d9f8c8d5d98?postId=384ef05f32b2": {
            "content": "<!DOCTYPE html>\n<html><head><base href=\"https://journal.artfuldev.com/media/1332267fe1665fafdc8c0d9f8c8d5d98?postId=384ef05f32b2\"><title>hello-world.v2.ts – Medium</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"twitter:widgets:csp\" content=\"on\"><meta name=\"robots\" content=\"noindex\"><style>body {text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-family: \"ff-tisa-web-pro\", Georgia, Cambria, \"Times New Roman\", Times, serif; font-weight: 400; color: #333332; font-size: 18px; line-height: 1.4; margin: 0; background-color: white; overflow: hidden;}iframe {max-width: 100%;}</style></head><body><style>.gist .gist-file { margin-bottom: 0 !important; }.gist { text-rendering: auto; }</style><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/gist-embed-87673c31a5b37b5e6556b63e1081ebbc.css\"><div id=\"gist80461015\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-hello-world-v2-ts\" class=\"file\">\n    \n\n  <div itemprop=\"text\" class=\"blob-wrapper data type-typescript\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tbody><tr>\n        <td id=\"file-hello-world-v2-ts-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-hello-world-v2-ts-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">import</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>./styles.scss<span class=\"pl-pds\">'</span></span>;</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-v2-ts-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-hello-world-v2-ts-LC2\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-v2-ts-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-hello-world-v2-ts-LC3\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">export</span> <span class=\"pl-k\">const</span> hello <span class=\"pl-k\">=</span> () <span class=\"pl-k\">=&gt;</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>Hello world!<span class=\"pl-pds\">'</span></span>; </td>\n      </tr>\n</tbody></table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/artfuldev/28ba1a7b16fba514a5b0755ef7e127c4/raw/faddbd7de43f4ed6773c49966631caf307bba530/hello-world.v2.ts\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/artfuldev/28ba1a7b16fba514a5b0755ef7e127c4#file-hello-world-v2-ts\">hello-world.v2.ts</a>\n        hosted with ❤ by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n</body></html>",
            "contentTextLength": 2835,
            "href": "https://journal.artfuldev.com/media/1332267fe1665fafdc8c0d9f8c8d5d98?postId=384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": true
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 2
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "hello-world.v2.ts – Medium",
            "url": "https://journal.artfuldev.com/media/1332267fe1665fafdc8c0d9f8c8d5d98?postId=384ef05f32b2"
        },
        "https://journal.artfuldev.com/media/264d5a80d834f9976dbec6e2fd721062?postId=384ef05f32b2": {
            "content": "<!DOCTYPE html>\n<html><head><base href=\"https://journal.artfuldev.com/media/264d5a80d834f9976dbec6e2fd721062?postId=384ef05f32b2\"><title>tsconfig.json – Medium</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"twitter:widgets:csp\" content=\"on\"><meta name=\"robots\" content=\"noindex\"><style>body {text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-family: \"ff-tisa-web-pro\", Georgia, Cambria, \"Times New Roman\", Times, serif; font-weight: 400; color: #333332; font-size: 18px; line-height: 1.4; margin: 0; background-color: white; overflow: hidden;}iframe {max-width: 100%;}</style></head><body><style>.gist .gist-file { margin-bottom: 0 !important; }.gist { text-rendering: auto; }</style><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/gist-embed-87673c31a5b37b5e6556b63e1081ebbc.css\"><div id=\"gist80465528\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-tsconfig-json\" class=\"file\">\n    \n\n  <div itemprop=\"text\" class=\"blob-wrapper data type-json\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tbody><tr>\n        <td id=\"file-tsconfig-json-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-tsconfig-json-LC1\" class=\"blob-code blob-code-inner js-file-line\">{</td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-tsconfig-json-LC2\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>compilerOptions<span class=\"pl-pds\">\"</span></span>: {</td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-tsconfig-json-LC3\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>outDir<span class=\"pl-pds\">\"</span></span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>./dist/<span class=\"pl-pds\">\"</span></span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-tsconfig-json-LC4\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>target<span class=\"pl-pds\">\"</span></span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>es5<span class=\"pl-pds\">\"</span></span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-tsconfig-json-LC5\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>module<span class=\"pl-pds\">\"</span></span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>esnext<span class=\"pl-pds\">\"</span></span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"></td>\n        <td id=\"file-tsconfig-json-LC6\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>moduleResolution<span class=\"pl-pds\">\"</span></span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>node<span class=\"pl-pds\">\"</span></span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"></td>\n        <td id=\"file-tsconfig-json-LC7\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>sourceMap<span class=\"pl-pds\">\"</span></span>: <span class=\"pl-c1\">true</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"></td>\n        <td id=\"file-tsconfig-json-LC8\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>experimentalDecorators<span class=\"pl-pds\">\"</span></span>: <span class=\"pl-c1\">true</span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"></td>\n        <td id=\"file-tsconfig-json-LC9\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>lib<span class=\"pl-pds\">\"</span></span>: [ <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>dom<span class=\"pl-pds\">\"</span></span>, <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>es6<span class=\"pl-pds\">\"</span></span>, <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>es5<span class=\"pl-pds\">\"</span></span> ]</td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"></td>\n        <td id=\"file-tsconfig-json-LC10\" class=\"blob-code blob-code-inner js-file-line\">  },</td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"></td>\n        <td id=\"file-tsconfig-json-LC11\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>include<span class=\"pl-pds\">\"</span></span>: [</td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"></td>\n        <td id=\"file-tsconfig-json-LC12\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>./src/**/*<span class=\"pl-pds\">\"</span></span></td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L13\" class=\"blob-num js-line-number\" data-line-number=\"13\"></td>\n        <td id=\"file-tsconfig-json-LC13\" class=\"blob-code blob-code-inner js-file-line\">  ],</td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L14\" class=\"blob-num js-line-number\" data-line-number=\"14\"></td>\n        <td id=\"file-tsconfig-json-LC14\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>exclude<span class=\"pl-pds\">\"</span></span>: [</td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L15\" class=\"blob-num js-line-number\" data-line-number=\"15\"></td>\n        <td id=\"file-tsconfig-json-LC15\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>./src/**/*.spec.ts<span class=\"pl-pds\">\"</span></span></td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L16\" class=\"blob-num js-line-number\" data-line-number=\"16\"></td>\n        <td id=\"file-tsconfig-json-LC16\" class=\"blob-code blob-code-inner js-file-line\">  ],</td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L17\" class=\"blob-num js-line-number\" data-line-number=\"17\"></td>\n        <td id=\"file-tsconfig-json-LC17\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>compileOnSave<span class=\"pl-pds\">\"</span></span>: <span class=\"pl-c1\">false</span></td>\n      </tr>\n      <tr>\n        <td id=\"file-tsconfig-json-L18\" class=\"blob-num js-line-number\" data-line-number=\"18\"></td>\n        <td id=\"file-tsconfig-json-LC18\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</tbody></table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/artfuldev/888d1561b44d9b865c0a39c1e250c57a/raw/0264f3049be2e6c84ad731f9444d0bd43102c603/tsconfig.json\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/artfuldev/888d1561b44d9b865c0a39c1e250c57a#file-tsconfig-json\">tsconfig.json</a>\n        hosted with ❤ by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n</body></html>",
            "contentTextLength": 7696,
            "href": "https://journal.artfuldev.com/media/264d5a80d834f9976dbec6e2fd721062?postId=384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": true
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 2
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "tsconfig.json – Medium",
            "url": "https://journal.artfuldev.com/media/264d5a80d834f9976dbec6e2fd721062?postId=384ef05f32b2"
        },
        "https://journal.artfuldev.com/media/3250d51ccec4df3da4f3447892218065?postId=384ef05f32b2": {
            "content": "<!DOCTYPE html>\n<html><head><base href=\"https://journal.artfuldev.com/media/3250d51ccec4df3da4f3447892218065?postId=384ef05f32b2\"><title>hello-world.spec.ts – Medium</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"twitter:widgets:csp\" content=\"on\"><meta name=\"robots\" content=\"noindex\"><style>body {text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-family: \"ff-tisa-web-pro\", Georgia, Cambria, \"Times New Roman\", Times, serif; font-weight: 400; color: #333332; font-size: 18px; line-height: 1.4; margin: 0; background-color: white; overflow: hidden;}iframe {max-width: 100%;}</style></head><body><style>.gist .gist-file { margin-bottom: 0 !important; }.gist { text-rendering: auto; }</style><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/gist-embed-87673c31a5b37b5e6556b63e1081ebbc.css\"><div id=\"gist80457575\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-hello-world-spec-ts\" class=\"file\">\n    \n\n  <div itemprop=\"text\" class=\"blob-wrapper data type-typescript\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tbody><tr>\n        <td id=\"file-hello-world-spec-ts-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-hello-world-spec-ts-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">import</span> { <span class=\"pl-smi\">hello</span> } <span class=\"pl-k\">from</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>./hello-world<span class=\"pl-pds\">'</span></span>;</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-spec-ts-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-hello-world-spec-ts-LC2\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">import</span> { <span class=\"pl-smi\">expect</span> } <span class=\"pl-k\">from</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>chai<span class=\"pl-pds\">'</span></span>;</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-spec-ts-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-hello-world-spec-ts-LC3\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">import</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>mocha<span class=\"pl-pds\">'</span></span>;</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-spec-ts-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-hello-world-spec-ts-LC4\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-spec-ts-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-hello-world-spec-ts-LC5\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-en\">describe</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>Hello function<span class=\"pl-pds\">'</span></span>, () <span class=\"pl-k\">=&gt;</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-spec-ts-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"></td>\n        <td id=\"file-hello-world-spec-ts-LC6\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-spec-ts-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"></td>\n        <td id=\"file-hello-world-spec-ts-LC7\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-en\">it</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>should return hello world<span class=\"pl-pds\">'</span></span>, () <span class=\"pl-k\">=&gt;</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-spec-ts-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"></td>\n        <td id=\"file-hello-world-spec-ts-LC8\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">const</span> result <span class=\"pl-k\">=</span> <span class=\"pl-en\">hello</span>();</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-spec-ts-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"></td>\n        <td id=\"file-hello-world-spec-ts-LC9\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-en\">expect</span>(<span class=\"pl-smi\">result</span>).<span class=\"pl-smi\">to</span>.<span class=\"pl-en\">equal</span>(<span class=\"pl-s\"><span class=\"pl-pds\">'</span>Hello world!<span class=\"pl-pds\">'</span></span>);</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-spec-ts-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"></td>\n        <td id=\"file-hello-world-spec-ts-LC10\" class=\"blob-code blob-code-inner js-file-line\">  });</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-spec-ts-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"></td>\n        <td id=\"file-hello-world-spec-ts-LC11\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-spec-ts-L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"></td>\n        <td id=\"file-hello-world-spec-ts-LC12\" class=\"blob-code blob-code-inner js-file-line\">});</td>\n      </tr>\n</tbody></table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/artfuldev/805a6b71cb45d76f785e437366c30ad9/raw/643d7148e742bcb7f021c317e9d80df763fff061/hello-world.spec.ts\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/artfuldev/805a6b71cb45d76f785e437366c30ad9#file-hello-world-spec-ts\">hello-world.spec.ts</a>\n        hosted with ❤ by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n</body></html>",
            "contentTextLength": 5755,
            "href": "https://journal.artfuldev.com/media/3250d51ccec4df3da4f3447892218065?postId=384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": true
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 2
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "hello-world.spec.ts – Medium",
            "url": "https://journal.artfuldev.com/media/3250d51ccec4df3da4f3447892218065?postId=384ef05f32b2"
        },
        "https://journal.artfuldev.com/media/3bae3235c7b64d8e09ceda4168c033e3?postId=384ef05f32b2": {
            "content": "<!DOCTYPE html>\n<html><head><base href=\"https://journal.artfuldev.com/media/3bae3235c7b64d8e09ceda4168c033e3?postId=384ef05f32b2\"><title>package.v4.json – Medium</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"twitter:widgets:csp\" content=\"on\"><meta name=\"robots\" content=\"noindex\"><style>body {text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-family: \"ff-tisa-web-pro\", Georgia, Cambria, \"Times New Roman\", Times, serif; font-weight: 400; color: #333332; font-size: 18px; line-height: 1.4; margin: 0; background-color: white; overflow: hidden;}iframe {max-width: 100%;}</style></head><body><style>.gist .gist-file { margin-bottom: 0 !important; }.gist { text-rendering: auto; }</style><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/gist-embed-87673c31a5b37b5e6556b63e1081ebbc.css\"><div id=\"gist80467107\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-package-v4-json\" class=\"file\">\n    \n\n  <div itemprop=\"text\" class=\"blob-wrapper data type-json\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tbody><tr>\n        <td id=\"file-package-v4-json-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-package-v4-json-LC1\" class=\"blob-code blob-code-inner js-file-line\">{</td>\n      </tr>\n      <tr>\n        <td id=\"file-package-v4-json-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-package-v4-json-LC2\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>scripts<span class=\"pl-pds\">\"</span></span>: {</td>\n      </tr>\n      <tr>\n        <td id=\"file-package-v4-json-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-package-v4-json-LC3\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>test<span class=\"pl-pds\">\"</span></span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>cross-env TS_NODE_COMPILER_OPTIONS='{ <span class=\"pl-cce\">\\\"</span>module<span class=\"pl-cce\">\\\"</span>: <span class=\"pl-cce\">\\\"</span>commonjs<span class=\"pl-cce\">\\\"</span> }' mocha -r ts-node/register -r ignore-styles -r jsdom-global/register src/**/*.spec.ts<span class=\"pl-pds\">\"</span></span></td>\n      </tr>\n      <tr>\n        <td id=\"file-package-v4-json-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-package-v4-json-LC4\" class=\"blob-code blob-code-inner js-file-line\">  }</td>\n      </tr>\n      <tr>\n        <td id=\"file-package-v4-json-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-package-v4-json-LC5\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</tbody></table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/artfuldev/f8f3c5c7b7517aeeebda49035b2da3dc/raw/8720f196055bc0f727afea635e585e6e6fe27f82/package.v4.json\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/artfuldev/f8f3c5c7b7517aeeebda49035b2da3dc#file-package-v4-json\">package.v4.json</a>\n        hosted with ❤ by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n</body></html>",
            "contentTextLength": 3420,
            "href": "https://journal.artfuldev.com/media/3bae3235c7b64d8e09ceda4168c033e3?postId=384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": true
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 2
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "package.v4.json – Medium",
            "url": "https://journal.artfuldev.com/media/3bae3235c7b64d8e09ceda4168c033e3?postId=384ef05f32b2"
        },
        "https://journal.artfuldev.com/media/46f0f788c01c4b194cefde2d9ec41eaf?postId=384ef05f32b2": {
            "content": "<!DOCTYPE html>\n<html><head><base href=\"https://journal.artfuldev.com/media/46f0f788c01c4b194cefde2d9ec41eaf?postId=384ef05f32b2\"><title>install-mocha-chai-ts.sh – Medium</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"twitter:widgets:csp\" content=\"on\"><meta name=\"robots\" content=\"noindex\"><style>body {text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-family: \"ff-tisa-web-pro\", Georgia, Cambria, \"Times New Roman\", Times, serif; font-weight: 400; color: #333332; font-size: 18px; line-height: 1.4; margin: 0; background-color: white; overflow: hidden;}iframe {max-width: 100%;}</style></head><body><style>.gist .gist-file { margin-bottom: 0 !important; }.gist { text-rendering: auto; }</style><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/gist-embed-87673c31a5b37b5e6556b63e1081ebbc.css\"><div id=\"gist80455664\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-install-mocha-chai-ts-sh\" class=\"file\">\n    \n\n  <div itemprop=\"text\" class=\"blob-wrapper data type-shell\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tbody><tr>\n        <td id=\"file-install-mocha-chai-ts-sh-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-install-mocha-chai-ts-sh-LC1\" class=\"blob-code blob-code-inner js-file-line\">$ npm install chai mocha ts-node @types/chai @types/mocha --save-dev</td>\n      </tr>\n</tbody></table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/artfuldev/47017cf37a7eae22a1a2d04c1a54023c/raw/7cd819d218272eaed925862f2efc4252b927f6e0/install-mocha-chai-ts.sh\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/artfuldev/47017cf37a7eae22a1a2d04c1a54023c#file-install-mocha-chai-ts-sh\">install-mocha-chai-ts.sh</a>\n        hosted with ❤ by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n</body></html>",
            "contentTextLength": 2139,
            "href": "https://journal.artfuldev.com/media/46f0f788c01c4b194cefde2d9ec41eaf?postId=384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": true
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 2
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "install-mocha-chai-ts.sh – Medium",
            "url": "https://journal.artfuldev.com/media/46f0f788c01c4b194cefde2d9ec41eaf?postId=384ef05f32b2"
        },
        "https://journal.artfuldev.com/media/48a721a0e2b65d851322f94f6bd4d020?postId=384ef05f32b2": {
            "content": "<!DOCTYPE html>\n<html><head><base href=\"https://journal.artfuldev.com/media/48a721a0e2b65d851322f94f6bd4d020?postId=384ef05f32b2\"><title>ignore-styles.sh – Medium</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"twitter:widgets:csp\" content=\"on\"><meta name=\"robots\" content=\"noindex\"><style>body {text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-family: \"ff-tisa-web-pro\", Georgia, Cambria, \"Times New Roman\", Times, serif; font-weight: 400; color: #333332; font-size: 18px; line-height: 1.4; margin: 0; background-color: white; overflow: hidden;}iframe {max-width: 100%;}</style></head><body><style>.gist .gist-file { margin-bottom: 0 !important; }.gist { text-rendering: auto; }</style><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/gist-embed-87673c31a5b37b5e6556b63e1081ebbc.css\"><div id=\"gist80461644\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-ignore-styles-sh\" class=\"file\">\n    \n\n  <div itemprop=\"text\" class=\"blob-wrapper data type-shell\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tbody><tr>\n        <td id=\"file-ignore-styles-sh-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-ignore-styles-sh-LC1\" class=\"blob-code blob-code-inner js-file-line\">$ npm install ignore-styles --save-dev</td>\n      </tr>\n</tbody></table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/artfuldev/852cf204e34d01c4278138fe2147d35a/raw/33579a961169063bd02afd26aaf23756dc31f9c4/ignore-styles.sh\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/artfuldev/852cf204e34d01c4278138fe2147d35a#file-ignore-styles-sh\">ignore-styles.sh</a>\n        hosted with ❤ by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n</body></html>",
            "contentTextLength": 2053,
            "href": "https://journal.artfuldev.com/media/48a721a0e2b65d851322f94f6bd4d020?postId=384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": true
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 2
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "ignore-styles.sh – Medium",
            "url": "https://journal.artfuldev.com/media/48a721a0e2b65d851322f94f6bd4d020?postId=384ef05f32b2"
        },
        "https://journal.artfuldev.com/media/492bacc690c54aa549a96b849fa572ed?postId=384ef05f32b2": {
            "content": "<!DOCTYPE html>\n<html><head><base href=\"https://journal.artfuldev.com/media/492bacc690c54aa549a96b849fa572ed?postId=384ef05f32b2\"><title>cross-env.sh – Medium</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"twitter:widgets:csp\" content=\"on\"><meta name=\"robots\" content=\"noindex\"><style>body {text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-family: \"ff-tisa-web-pro\", Georgia, Cambria, \"Times New Roman\", Times, serif; font-weight: 400; color: #333332; font-size: 18px; line-height: 1.4; margin: 0; background-color: white; overflow: hidden;}iframe {max-width: 100%;}</style></head><body><style>.gist .gist-file { margin-bottom: 0 !important; }.gist { text-rendering: auto; }</style><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/gist-embed-87673c31a5b37b5e6556b63e1081ebbc.css\"><div id=\"gist80466208\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-cross-env-sh\" class=\"file\">\n    \n\n  <div itemprop=\"text\" class=\"blob-wrapper data type-shell\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tbody><tr>\n        <td id=\"file-cross-env-sh-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-cross-env-sh-LC1\" class=\"blob-code blob-code-inner js-file-line\">$ npm install cross-env --save-dev</td>\n      </tr>\n</tbody></table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/artfuldev/744d859a8c8603b446d62e8b0c12654a/raw/91a40b593facbcda909cc4aafc6a55ac9d9c6e78/cross-env.sh\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/artfuldev/744d859a8c8603b446d62e8b0c12654a#file-cross-env-sh\">cross-env.sh</a>\n        hosted with ❤ by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n</body></html>",
            "contentTextLength": 2021,
            "href": "https://journal.artfuldev.com/media/492bacc690c54aa549a96b849fa572ed?postId=384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": true
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 2
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "cross-env.sh – Medium",
            "url": "https://journal.artfuldev.com/media/492bacc690c54aa549a96b849fa572ed?postId=384ef05f32b2"
        },
        "https://journal.artfuldev.com/media/5704b996be3ebc61c4f6788571c2e2ca?postId=384ef05f32b2": {
            "content": "<!DOCTYPE html>\n<html><head><base href=\"https://journal.artfuldev.com/media/5704b996be3ebc61c4f6788571c2e2ca?postId=384ef05f32b2\"><title>package.v3.json – Medium</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"twitter:widgets:csp\" content=\"on\"><meta name=\"robots\" content=\"noindex\"><style>body {text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-family: \"ff-tisa-web-pro\", Georgia, Cambria, \"Times New Roman\", Times, serif; font-weight: 400; color: #333332; font-size: 18px; line-height: 1.4; margin: 0; background-color: white; overflow: hidden;}iframe {max-width: 100%;}</style></head><body><style>.gist .gist-file { margin-bottom: 0 !important; }.gist { text-rendering: auto; }</style><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/gist-embed-87673c31a5b37b5e6556b63e1081ebbc.css\"><div id=\"gist80463909\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-package-v3-json\" class=\"file\">\n    \n\n  <div itemprop=\"text\" class=\"blob-wrapper data type-json\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tbody><tr>\n        <td id=\"file-package-v3-json-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-package-v3-json-LC1\" class=\"blob-code blob-code-inner js-file-line\">{</td>\n      </tr>\n      <tr>\n        <td id=\"file-package-v3-json-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-package-v3-json-LC2\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>scripts<span class=\"pl-pds\">\"</span></span>: {</td>\n      </tr>\n      <tr>\n        <td id=\"file-package-v3-json-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-package-v3-json-LC3\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>test<span class=\"pl-pds\">\"</span></span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>mocha -r ts-node/register -r ignore-styles -r jsdom-global/register src/**/*.spec.ts<span class=\"pl-pds\">\"</span></span></td>\n      </tr>\n      <tr>\n        <td id=\"file-package-v3-json-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-package-v3-json-LC4\" class=\"blob-code blob-code-inner js-file-line\">  }</td>\n      </tr>\n      <tr>\n        <td id=\"file-package-v3-json-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-package-v3-json-LC5\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</tbody></table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/artfuldev/2e64b6d5b564efb3b65a11795f6ed8b0/raw/7d1943e6f19fe79f3246422afd2dc7e0cd6281cf/package.v3.json\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/artfuldev/2e64b6d5b564efb3b65a11795f6ed8b0#file-package-v3-json\">package.v3.json</a>\n        hosted with ❤ by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n</body></html>",
            "contentTextLength": 3242,
            "href": "https://journal.artfuldev.com/media/5704b996be3ebc61c4f6788571c2e2ca?postId=384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": true
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 2
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "package.v3.json – Medium",
            "url": "https://journal.artfuldev.com/media/5704b996be3ebc61c4f6788571c2e2ca?postId=384ef05f32b2"
        },
        "https://journal.artfuldev.com/media/70620a582825b3f69261a46fda6f1a8f?postId=384ef05f32b2": {
            "content": "<!DOCTYPE html>\n<html><head><base href=\"https://journal.artfuldev.com/media/70620a582825b3f69261a46fda6f1a8f?postId=384ef05f32b2\"><title>package.json – Medium</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"twitter:widgets:csp\" content=\"on\"><meta name=\"robots\" content=\"noindex\"><style>body {text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-family: \"ff-tisa-web-pro\", Georgia, Cambria, \"Times New Roman\", Times, serif; font-weight: 400; color: #333332; font-size: 18px; line-height: 1.4; margin: 0; background-color: white; overflow: hidden;}iframe {max-width: 100%;}</style></head><body><style>.gist .gist-file { margin-bottom: 0 !important; }.gist { text-rendering: auto; }</style><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/gist-embed-87673c31a5b37b5e6556b63e1081ebbc.css\"><div id=\"gist80458489\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-package-json\" class=\"file\">\n    \n\n  <div itemprop=\"text\" class=\"blob-wrapper data type-json\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tbody><tr>\n        <td id=\"file-package-json-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-package-json-LC1\" class=\"blob-code blob-code-inner js-file-line\">{</td>\n      </tr>\n      <tr>\n        <td id=\"file-package-json-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-package-json-LC2\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>scripts<span class=\"pl-pds\">\"</span></span>: {</td>\n      </tr>\n      <tr>\n        <td id=\"file-package-json-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-package-json-LC3\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>test<span class=\"pl-pds\">\"</span></span>: <span class=\"pl-s\"><span class=\"pl-pds\">\"</span>mocha -r ts-node/register src/**/*.spec.ts<span class=\"pl-pds\">\"</span></span>,</td>\n      </tr>\n      <tr>\n        <td id=\"file-package-json-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-package-json-LC4\" class=\"blob-code blob-code-inner js-file-line\">  },</td>\n      </tr>\n      <tr>\n        <td id=\"file-package-json-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-package-json-LC5\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</tbody></table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/artfuldev/657f3ef9e09056dc724b1c966813e789/raw/797e1f8507ee9d785ca025b0941751cb5444b04f/package.json\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/artfuldev/657f3ef9e09056dc724b1c966813e789#file-package-json\">package.json</a>\n        hosted with ❤ by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n</body></html>",
            "contentTextLength": 3157,
            "href": "https://journal.artfuldev.com/media/70620a582825b3f69261a46fda6f1a8f?postId=384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": true
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 2
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "package.json – Medium",
            "url": "https://journal.artfuldev.com/media/70620a582825b3f69261a46fda6f1a8f?postId=384ef05f32b2"
        },
        "https://journal.artfuldev.com/media/8d779a252338df599e9ee821cd24e492?postId=384ef05f32b2": {
            "content": "<!DOCTYPE html>\n<html><head><base href=\"https://journal.artfuldev.com/media/8d779a252338df599e9ee821cd24e492?postId=384ef05f32b2\"><title>js-dom.sh – Medium</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"twitter:widgets:csp\" content=\"on\"><meta name=\"robots\" content=\"noindex\"><style>body {text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-family: \"ff-tisa-web-pro\", Georgia, Cambria, \"Times New Roman\", Times, serif; font-weight: 400; color: #333332; font-size: 18px; line-height: 1.4; margin: 0; background-color: white; overflow: hidden;}iframe {max-width: 100%;}</style></head><body><style>.gist .gist-file { margin-bottom: 0 !important; }.gist { text-rendering: auto; }</style><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/gist-embed-87673c31a5b37b5e6556b63e1081ebbc.css\"><div id=\"gist80463760\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-js-dom-sh\" class=\"file\">\n    \n\n  <div itemprop=\"text\" class=\"blob-wrapper data type-shell\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tbody><tr>\n        <td id=\"file-js-dom-sh-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-js-dom-sh-LC1\" class=\"blob-code blob-code-inner js-file-line\">$ npm install jsdom jsdom-global --save-dev</td>\n      </tr>\n</tbody></table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/artfuldev/7f4481104d5ba1740f2ceb83fe2414ae/raw/ebe96fb561ae860cd6b6d89b945eababc50eddb2/js-dom.sh\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/artfuldev/7f4481104d5ba1740f2ceb83fe2414ae#file-js-dom-sh\">js-dom.sh</a>\n        hosted with ❤ by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n</body></html>",
            "contentTextLength": 2009,
            "href": "https://journal.artfuldev.com/media/8d779a252338df599e9ee821cd24e492?postId=384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": true
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 2
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "js-dom.sh – Medium",
            "url": "https://journal.artfuldev.com/media/8d779a252338df599e9ee821cd24e492?postId=384ef05f32b2"
        },
        "https://journal.artfuldev.com/media/af8d9ace95e6e79747acd19e5e659169?postId=384ef05f32b2": {
            "content": "<!DOCTYPE html>\n<html><head><base href=\"https://journal.artfuldev.com/media/af8d9ace95e6e79747acd19e5e659169?postId=384ef05f32b2\"><title>styles.scss – Medium</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"twitter:widgets:csp\" content=\"on\"><meta name=\"robots\" content=\"noindex\"><style>body {text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-family: \"ff-tisa-web-pro\", Georgia, Cambria, \"Times New Roman\", Times, serif; font-weight: 400; color: #333332; font-size: 18px; line-height: 1.4; margin: 0; background-color: white; overflow: hidden;}iframe {max-width: 100%;}</style></head><body><style>.gist .gist-file { margin-bottom: 0 !important; }.gist { text-rendering: auto; }</style><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/gist-embed-87673c31a5b37b5e6556b63e1081ebbc.css\"><div id=\"gist80460768\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-styles-scss\" class=\"file\">\n    \n\n  <div itemprop=\"text\" class=\"blob-wrapper data type-scss\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tbody><tr>\n        <td id=\"file-styles-scss-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-styles-scss-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">html</span> {</td>\n      </tr>\n      <tr>\n        <td id=\"file-styles-scss-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-styles-scss-LC2\" class=\"blob-code blob-code-inner js-file-line\">  <span class=\"pl-c1\"><span class=\"pl-c1\">height</span></span>: <span class=\"pl-c1\">100</span><span class=\"pl-k\">%</span>;</td>\n      </tr>\n      <tr>\n        <td id=\"file-styles-scss-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-styles-scss-LC3\" class=\"blob-code blob-code-inner js-file-line\">}</td>\n      </tr>\n</tbody></table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/artfuldev/fec6bd4037d93e183bec8f04a0017e61/raw/b3408b3aa52a6906cb28a1fcca7b4bd2d466b4e9/styles.scss\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/artfuldev/fec6bd4037d93e183bec8f04a0017e61#file-styles-scss\">styles.scss</a>\n        hosted with ❤ by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n</body></html>",
            "contentTextLength": 2556,
            "href": "https://journal.artfuldev.com/media/af8d9ace95e6e79747acd19e5e659169?postId=384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": true
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 2
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "styles.scss – Medium",
            "url": "https://journal.artfuldev.com/media/af8d9ace95e6e79747acd19e5e659169?postId=384ef05f32b2"
        },
        "https://journal.artfuldev.com/media/cfc3fc50133fc06fb8cee86ac2292ea1?postId=384ef05f32b2": {
            "content": "<!DOCTYPE html>\n<html><head><base href=\"https://journal.artfuldev.com/media/cfc3fc50133fc06fb8cee86ac2292ea1?postId=384ef05f32b2\"><title>hello-world.v3.ts – Medium</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"twitter:widgets:csp\" content=\"on\"><meta name=\"robots\" content=\"noindex\"><style>body {text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-family: \"ff-tisa-web-pro\", Georgia, Cambria, \"Times New Roman\", Times, serif; font-weight: 400; color: #333332; font-size: 18px; line-height: 1.4; margin: 0; background-color: white; overflow: hidden;}iframe {max-width: 100%;}</style></head><body><style>.gist .gist-file { margin-bottom: 0 !important; }.gist { text-rendering: auto; }</style><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/gist-embed-87673c31a5b37b5e6556b63e1081ebbc.css\"><div id=\"gist80463010\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-hello-world-v3-ts\" class=\"file\">\n    \n\n  <div itemprop=\"text\" class=\"blob-wrapper data type-typescript\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tbody><tr>\n        <td id=\"file-hello-world-v3-ts-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-hello-world-v3-ts-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">import</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>./styles.scss<span class=\"pl-pds\">'</span></span>;</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-v3-ts-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"></td>\n        <td id=\"file-hello-world-v3-ts-LC2\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-v3-ts-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"></td>\n        <td id=\"file-hello-world-v3-ts-LC3\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">export</span> <span class=\"pl-k\">const</span> hello <span class=\"pl-k\">=</span> () <span class=\"pl-k\">=&gt;</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>Hello world!<span class=\"pl-pds\">'</span></span>;</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-v3-ts-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"></td>\n        <td id=\"file-hello-world-v3-ts-LC4\" class=\"blob-code blob-code-inner js-file-line\">\n</td>\n      </tr>\n      <tr>\n        <td id=\"file-hello-world-v3-ts-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"></td>\n        <td id=\"file-hello-world-v3-ts-LC5\" class=\"blob-code blob-code-inner js-file-line\">(&lt;<span class=\"pl-c1\">any</span>&gt;<span class=\"pl-c1\">window</span>).<span class=\"pl-smi\">hello</span> <span class=\"pl-k\">=</span> <span class=\"pl-smi\">hello</span>;</td>\n      </tr>\n</tbody></table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/artfuldev/d082e2a2df1f47117a15d84f496c99e3/raw/43fec732a4c7d815c3cd5e18fec47dbe3156bf32/hello-world.v3.ts\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/artfuldev/d082e2a2df1f47117a15d84f496c99e3#file-hello-world-v3-ts\">hello-world.v3.ts</a>\n        hosted with ❤ by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n</body></html>",
            "contentTextLength": 3449,
            "href": "https://journal.artfuldev.com/media/cfc3fc50133fc06fb8cee86ac2292ea1?postId=384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": true
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 2
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "hello-world.v3.ts – Medium",
            "url": "https://journal.artfuldev.com/media/cfc3fc50133fc06fb8cee86ac2292ea1?postId=384ef05f32b2"
        },
        "https://journal.artfuldev.com/media/dac0a6422059288f196c2a0dd83d4f1e?postId=384ef05f32b2": {
            "content": "<!DOCTYPE html>\n<html><head><base href=\"https://journal.artfuldev.com/media/dac0a6422059288f196c2a0dd83d4f1e?postId=384ef05f32b2\"><title>hello-world.ts – Medium</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"twitter:widgets:csp\" content=\"on\"><meta name=\"robots\" content=\"noindex\"><style>body {text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-family: \"ff-tisa-web-pro\", Georgia, Cambria, \"Times New Roman\", Times, serif; font-weight: 400; color: #333332; font-size: 18px; line-height: 1.4; margin: 0; background-color: white; overflow: hidden;}iframe {max-width: 100%;}</style></head><body><style>.gist .gist-file { margin-bottom: 0 !important; }.gist { text-rendering: auto; }</style><link rel=\"stylesheet\" href=\"https://assets-cdn.github.com/assets/gist-embed-87673c31a5b37b5e6556b63e1081ebbc.css\"><div id=\"gist80457096\" class=\"gist\">\n    <div class=\"gist-file\">\n      <div class=\"gist-data\">\n        <div class=\"js-gist-file-update-container js-task-list-container file-box\">\n  <div id=\"file-hello-world-ts\" class=\"file\">\n    \n\n  <div itemprop=\"text\" class=\"blob-wrapper data type-typescript\">\n      <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n      <tbody><tr>\n        <td id=\"file-hello-world-ts-L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"></td>\n        <td id=\"file-hello-world-ts-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">export</span> <span class=\"pl-k\">const</span> hello <span class=\"pl-k\">=</span> () <span class=\"pl-k\">=&gt;</span> <span class=\"pl-s\"><span class=\"pl-pds\">'</span>Hello world!<span class=\"pl-pds\">'</span></span>; </td>\n      </tr>\n</tbody></table>\n\n\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\"gist-meta\">\n        <a href=\"https://gist.github.com/artfuldev/ed20bdd2eef42170f1592d320c34a785/raw/ed4d2975d52976fc68d925f0b201b484f3cf27a2/hello-world.ts\" style=\"float:right\">view raw</a>\n        <a href=\"https://gist.github.com/artfuldev/ed20bdd2eef42170f1592d320c34a785#file-hello-world-ts\">hello-world.ts</a>\n        hosted with ❤ by <a href=\"https://github.com\">GitHub</a>\n      </div>\n    </div>\n</div>\n</body></html>",
            "contentTextLength": 2238,
            "href": "https://journal.artfuldev.com/media/dac0a6422059288f196c2a0dd83d4f1e?postId=384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": true
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 2
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "hello-world.ts – Medium",
            "url": "https://journal.artfuldev.com/media/dac0a6422059288f196c2a0dd83d4f1e?postId=384ef05f32b2"
        },
        "undefined": {
            "content": "<!DOCTYPE html>\n<html xmlns:cc=\"http://creativecommons.org/ns#\"><head prefix=\"og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# medium-com: http://ogp.me/ns/fb/medium-com#\"><base href=\"https://journal.artfuldev.com/unit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2\"><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, viewport-fit=contain\"><title>Unit testing node applications with TypeScript — using mocha and chai</title><link rel=\"canonical\" href=\"https://journal.artfuldev.com/unit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2\"><meta name=\"title\" content=\"Unit testing node applications with TypeScript — using mocha and chai\"><meta name=\"referrer\" content=\"always\"><meta name=\"description\" content=\"TypeScript has gotten so much better in the last year, and so many new applications and projects are built on top its awesomeness. But how do you write your tests in TypeScript and have them run?\"><meta name=\"theme-color\" content=\"#000000\"><meta property=\"og:title\" content=\"Unit testing node applications with TypeScript — using mocha and chai\"><meta property=\"og:url\" content=\"https://journal.artfuldev.com/unit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2\"><meta property=\"og:image\" content=\"https://cdn-images-1.medium.com/max/1200/1*j4oOOKFcBCmSOfVlAx5UTA.jpeg\"><meta property=\"fb:app_id\" content=\"542599432471018\"><meta property=\"og:description\" content=\"TypeScript has gotten so much better in the last year, and so many projects have adopted it. But how do you write your tests in TypeScript?\"><meta name=\"twitter:description\" content=\"TypeScript has gotten so much better in the last year, and so many projects have adopted it. But how do you write your tests in TypeScript?\"><meta name=\"twitter:image:src\" content=\"https://cdn-images-1.medium.com/max/1200/1*j4oOOKFcBCmSOfVlAx5UTA.jpeg\"><link rel=\"publisher\" href=\"https://plus.google.com/103654360130207659246\"><link rel=\"author\" href=\"https://journal.artfuldev.com/@artfuldev\"><meta property=\"author\" content=\"Sudarsan Balaji\"><meta property=\"og:type\" content=\"article\"><meta name=\"twitter:card\" content=\"summary_large_image\"><meta property=\"article:publisher\" content=\"https://www.facebook.com/medium\"><meta property=\"article:author\" content=\"Sudarsan Balaji\"><meta name=\"robots\" content=\"index, follow\"><meta property=\"article:published_time\" content=\"2017-09-25T21:06:26.715Z\"><meta name=\"twitter:creator\" content=\"@theartfuldev\"><meta name=\"twitter:site\" content=\"@Medium\"><meta property=\"og:site_name\" content=\"The Journal of Artful Development\"><meta name=\"twitter:label1\" value=\"Reading time\"><meta name=\"twitter:data1\" value=\"6 min read\"><meta name=\"twitter:app:name:iphone\" content=\"Medium\"><meta name=\"twitter:app:id:iphone\" content=\"828256236\"><meta name=\"twitter:app:url:iphone\" content=\"medium://p/384ef05f32b2\"><meta property=\"al:ios:app_name\" content=\"Medium\"><meta property=\"al:ios:app_store_id\" content=\"828256236\"><meta property=\"al:android:package\" content=\"com.medium.reader\"><meta property=\"al:android:app_name\" content=\"Medium\"><meta property=\"al:ios:url\" content=\"medium://p/384ef05f32b2\"><meta property=\"al:android:url\" content=\"medium://p/384ef05f32b2\"><meta property=\"al:web:url\" content=\"https://journal.artfuldev.com/unit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2\"><link rel=\"search\" type=\"application/opensearchdescription+xml\" title=\"Medium\" href=\"/osd.xml\"><link rel=\"alternate\" href=\"android-app://com.medium.reader/https/medium.com/p/384ef05f32b2\"><link rel=\"stylesheet\" type=\"text/css\" class=\"js-glyph-\" id=\"glyph-8\" href=\"https://glyph.medium.com/css/e/sr/latin/e/ssr/latin/e/ssb/latin/m2.css\"><link rel=\"stylesheet\" href=\"https://cdn-static-1.medium.com/_/fp/css/main-branding-base.Wd2nhDzXq-LXOBFJaK5iAA.css\"><style>section.section-image--fullBleed.is-backgrounded {padding-top: 1067px;}section.section-image--fullScreen.is-backgrounded, section.section-image--coverFade.is-backgrounded {min-height: 970px; padding-top: 485px;}.u-sizeViewHeight100 {height: 970px !important;}.u-sizeViewHeight110 {height: 1067px !important;}.u-sizeViewHeightMin100 {min-height: 970px !important;}.u-sizeViewHeightMax100 {max-height: 970px !important;}section.section-image--coverFade {height: 970px;}.section-aspectRatioViewportPlaceholder, .section-aspectRatioViewportCropPlaceholder {max-height: 970px;}.section-aspectRatioViewportBottomSpacer, .section-aspectRatioViewportBottomPlaceholder {max-height: 485px;}.zoomable:before {top: -970px; left: -750px; padding: 970px 750px;}</style><!--[if lt IE 9]><script charset=\"UTF-8\" src=\"https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.js\"></script><![endif]--><link rel=\"icon\" href=\"https://cdn-images-1.medium.com/fit/c/128/128/1*Gr7TGxz3e_rJH4GQD5q12g.png\" class=\"js-favicon\"><link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"https://cdn-images-1.medium.com/fit/c/152/152/1*Gr7TGxz3e_rJH4GQD5q12g.png\"><link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"https://cdn-images-1.medium.com/fit/c/120/120/1*Gr7TGxz3e_rJH4GQD5q12g.png\"><link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"https://cdn-images-1.medium.com/fit/c/76/76/1*Gr7TGxz3e_rJH4GQD5q12g.png\"><link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"https://cdn-images-1.medium.com/fit/c/60/60/1*Gr7TGxz3e_rJH4GQD5q12g.png\"><link rel=\"mask-icon\" href=\"https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.svg\" color=\"#171717\"></head><body itemscope=\"\" class=\"postShowScreen browser-chrome os-android is-withMagicUnderlinesv-glyph v-glyph--m2 is-js is-withMagicUnderlines\" data-action-scope=\"_actionscope_0\"><div class=\"site-main surface-container\" id=\"container\"><div class=\"butterBar butterBar--error\" data-action-scope=\"_actionscope_1\"></div><div class=\"surface\" id=\"_obv.shell._surface_1530715516971\" style=\"display: block; visibility: visible;\"><div class=\"screenContent surface-content is-supportsVirtualKeyboard is-supplementalPostContentLoaded\" data-used=\"true\" data-action-scope=\"_actionscope_2\"><canvas class=\"canvas-renderer\" width=\"750\" height=\"970\"></canvas><div class=\"container u-maxWidth740 u-xs-margin0 notesPositionContainer js-notesPositionContainer\"><div class=\"notesMarkers\" data-action-scope=\"_actionscope_3\"></div></div><div class=\"metabar u-clearfix js-metabar u-fixed u-backgroundTransparentWhiteDarkest u-xs-sizeFullViewportWidth\"><div class=\"js-metabarMiddle metabar-inner u-marginAuto u-maxWidth1000 u-flexCenter u-justifyContentSpaceBetween u-height65 u-xs-height56 u-paddingLeft20 u-paddingRight20\"><div class=\"metabar-block u-flex1  u-flexCenter\"><div class=\"js-metabarLogoLeft\"><a href=\"https://medium.com/\" data-log-event=\"home\" class=\"siteNav-logo u-flexCenter u-paddingTop0\"><span class=\"svgIcon svgIcon--logoMonogram svgIcon--45px is-flushLeft u-textColorDarker\"><svg class=\"svgIcon-use\" width=\"45\" height=\"45\" viewBox=\"0 0 45 45\"><path d=\"M5 40V5h35v35H5zm8.56-12.627c0 .555-.027.687-.318 1.03l-2.457 2.985v.396h6.974v-.396l-2.456-2.985c-.291-.343-.344-.502-.344-1.03V18.42l6.127 13.364h.714l5.256-13.364v10.644c0 .29 0 .342-.185.528l-1.848 1.796v.396h9.19v-.396l-1.822-1.796c-.184-.186-.21-.238-.21-.528V15.937c0-.291.026-.344.21-.528l1.823-1.797v-.396h-6.471l-4.622 11.542-5.203-11.542h-6.79v.396l2.14 2.64c.239.292.291.37.291.768v10.353z\"></path></svg></span><span class=\"u-textScreenReader\">Homepage</span></a></div><div class=\"u-flexCenter u-height65 u-xs-height56\"><span class=\"u-inlineBlock u-height28 u-xs-height24 u-verticalAlignTop u-marginRight20 u-marginLeft15 u-borderRightLighter\"></span></div><div class=\"u-flexCenter u-height65 u-xs-height56 u-marginRight18\"><a class=\"link u-baseColor--link avatar avatar--roundedRectangle\" href=\"https://journal.artfuldev.com?source=avatar-lo_WfwOzwfvAVaV-81a1a981c869\" title=\"Go to The Journal of Artful Development\" aria-label=\"Go to The Journal of Artful Development\" data-action-source=\"avatar-lo_WfwOzwfvAVaV-81a1a981c869\" data-collection-slug=\"the-journal-of-artful-development\"><img src=\"https://cdn-images-1.medium.com/fit/c/32/32/1*Gr7TGxz3e_rJH4GQD5q12g.png\" class=\"avatar-image avatar-image--icon\" alt=\"The Journal of Artful Development\"></a></div><div class=\"u-flexCenter u-height65 u-xs-height56 u-xs-hide\"><div class=\"buttonSet\"><button class=\"button button--primary button--smallest u-noUserSelect button--withChrome u-accentColor--buttonNormal js-relationshipButton is-smallPill\" data-action=\"sign-up-prompt\" data-sign-in-action=\"toggle-follow-collection\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/subscribe/collection/the-journal-of-artful-development\" data-action-source=\"----81a1a981c869----------------------follow_header\" data-collection-id=\"81a1a981c869\"><span class=\"button-label  js-buttonLabel\">Follow</span></button></div></div></div><div class=\"metabar-block u-flex0 u-flexCenter\"><div class=\"u-flexCenter u-height65 u-xs-height56\"><div class=\"buttonSet buttonSet--wide u-lineHeightInherit\"><label class=\"button button--chromeless inputGroup u-sm-hide metabar-predictiveSearch u-baseColor--buttonNormal u-baseColor--placeholderNormal\" title=\"Search\"><span class=\"svgIcon svgIcon--search svgIcon--25px u-top0 u-baseColor--iconLight\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M20.067 18.933l-4.157-4.157a6 6 0 1 0-.884.884l4.157 4.157a.624.624 0 1 0 .884-.884zM6.5 11c0-2.62 2.13-4.75 4.75-4.75S16 8.38 16 11s-2.13 4.75-4.75 4.75S6.5 13.62 6.5 11z\"></path></svg></span><input class=\"js-predictiveSearchInput textInput textInput--rounded textInput--darkText u-baseColor--textNormal textInput--transparent\" type=\"search\" placeholder=\"Search\" required=\"true\" data-collection-id=\"81a1a981c869\"></label><a class=\"button button--small button--chromeless u-sm-show is-inSiteNavBar u-baseColor--buttonNormal button--withIcon button--withSvgIcon u-xs-top2\" href=\"https://journal.artfuldev.com/search\" title=\"Search\" aria-label=\"Search\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--search svgIcon--25px\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M20.067 18.933l-4.157-4.157a6 6 0 1 0-.884.884l4.157 4.157a.624.624 0 1 0 .884-.884zM6.5 11c0-2.62 2.13-4.75 4.75-4.75S16 8.38 16 11s-2.13 4.75-4.75 4.75S6.5 13.62 6.5 11z\"></path></svg></span></span></a><a class=\"button button--primary button--chromeless u-accentColor--buttonNormal is-inSiteNavBar u-xs-hide js-signInButton\" href=\"https://medium.com/m/signin?redirect=https%3A%2F%2Fjournal.artfuldev.com%2Funit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2&amp;source=--------------------------nav_reg&amp;operation=login\" data-action=\"sign-in-prompt\" data-redirect=\"https://journal.artfuldev.com/unit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2\" data-action-source=\"--------------------------nav_reg\">Sign in</a><a class=\"button button--primary button--withChrome u-accentColor--buttonNormal is-inSiteNavBar js-signUpButton\" href=\"https://medium.com/m/signin?redirect=https%3A%2F%2Fjournal.artfuldev.com%2Funit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2&amp;source=--------------------------nav_reg&amp;operation=register\" data-action=\"sign-up-prompt\" data-redirect=\"https://journal.artfuldev.com/unit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2\" data-action-source=\"--------------------------nav_reg\">Get started</a></div></div></div></div></div><div class=\"metabar metabar--spacer js-metabarSpacer u-height65 u-xs-height56\"></div><main role=\"main\"><article class=\" u-minHeight100vhOffset65 u-overflowHidden postArticle postArticle--full is-withAccentColors u-marginBottom40\" lang=\"en\"><header class=\"container u-maxWidth740\"><div class=\"uiScale uiScale-ui--regular uiScale-caption--regular postMetaHeader u-paddingBottom10 row\"><div class=\"col u-size12of12 js-postMetaLockup\"><div class=\"uiScale uiScale-ui--regular uiScale-caption--regular postMetaLockup postMetaLockup--authorWithBio u-flexCenter js-postMetaLockup\"><div class=\"u-flex0\"><a class=\"link u-baseColor--link avatar\" href=\"https://journal.artfuldev.com/@artfuldev?source=post_header_lockup\" data-action=\"show-user-card\" data-action-source=\"post_header_lockup\" data-action-value=\"f9927938f0d0\" data-action-type=\"hover\" data-user-id=\"f9927938f0d0\" data-collection-slug=\"the-journal-of-artful-development\" dir=\"auto\"><img src=\"https://cdn-images-1.medium.com/fit/c/60/60/0*PnnfhI54q5g94WEk.jpg\" class=\"avatar-image avatar-image--small\" alt=\"Go to the profile of Sudarsan Balaji\"></a></div><div class=\"u-flex1 u-paddingLeft15 u-overflowHidden\"><div class=\"u-lineHeightTightest\"><a class=\"ds-link ds-link--styleSubtle ui-captionStrong u-inlineBlock link link--darken link--darker\" href=\"https://journal.artfuldev.com/@artfuldev?source=post_header_lockup\" data-action=\"show-user-card\" data-action-source=\"post_header_lockup\" data-action-value=\"f9927938f0d0\" data-action-type=\"hover\" data-user-id=\"f9927938f0d0\" data-collection-slug=\"the-journal-of-artful-development\" dir=\"auto\">Sudarsan Balaji</a><span class=\"followState js-followState\" data-user-id=\"f9927938f0d0\"><button class=\"button button--smallest u-noUserSelect button--withChrome u-baseColor--buttonNormal button--withHover button--unblock js-unblockButton u-marginLeft10 u-xs-hide\" data-action=\"sign-up-prompt\" data-sign-in-action=\"toggle-block-user\" data-requires-token=\"true\" data-redirect=\"https://journal.artfuldev.com/unit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2\" data-action-source=\"post_header_lockup\"><span class=\"button-label  button-defaultState\">Blocked</span><span class=\"button-label button-hoverState\">Unblock</span></button><button class=\"button button--primary button--smallest u-noUserSelect button--withChrome u-accentColor--buttonNormal button--follow js-followButton u-marginLeft10 u-xs-hide\" data-action=\"sign-up-prompt\" data-sign-in-action=\"toggle-subscribe-user\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/subscribe/user/f9927938f0d0\" data-action-source=\"post_header_lockup-f9927938f0d0-------------------------follow_byline\"><span class=\"button-label  button-defaultState js-buttonLabel\">Follow</span><span class=\"button-label button-activeState\">Following</span></button></span></div><div class=\"ui-caption ui-xs-clamp2 postMetaInline\">Software, Technology, Gadgets, Art, Mathematics, Development, Design, Learning, Problem-solving. Obsessed with quality.</div><div class=\"ui-caption postMetaInline js-testPostMetaInlineSupplemental\"><time datetime=\"2017-09-25T21:06:26.715Z\">Sep 25, 2017</time><span class=\"middotDivider u-fontSize12\"></span><span class=\"readingTime\" title=\"6 min read\"></span></div></div></div></div></div></header><div class=\"postArticle-content js-postField js-notesSource js-trackedPost\" data-post-id=\"384ef05f32b2\" data-source=\"post_page\" data-collection-id=\"81a1a981c869\" data-tracking-context=\"postPage\" data-scroll=\"native\"><section name=\"0b9d\" class=\"section section--body section--first\"><div class=\"section-divider\"><hr class=\"section-divider\"></div><div class=\"section-content\"><div class=\"section-inner sectionLayout--insetColumn\"><h1 name=\"f854\" id=\"f854\" class=\"graf graf--h3 graf--leading graf--title\">Unit testing node applications with TypeScript — using mocha and&nbsp;chai</h1></div><div class=\"section-inner sectionLayout--fullWidth\"><figure name=\"69bd\" id=\"69bd\" class=\"graf graf--figure graf--layoutFillWidth graf-after--h3\" data-scroll=\"native\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 66.7%;\"></div><div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*j4oOOKFcBCmSOfVlAx5UTA.jpeg\" data-width=\"6000\" data-height=\"4000\" data-is-featured=\"true\" data-scroll=\"native\"><img src=\"https://cdn-images-1.medium.com/freeze/max/30/1*j4oOOKFcBCmSOfVlAx5UTA.jpeg?q=20\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"50\"></canvas><img class=\"progressiveMedia-image js-progressiveMedia-image\" data-src=\"https://cdn-images-1.medium.com/max/2000/1*j4oOOKFcBCmSOfVlAx5UTA.jpeg\" src=\"https://cdn-images-1.medium.com/max/2000/1*j4oOOKFcBCmSOfVlAx5UTA.jpeg\"><noscript class=\"js-progressiveMedia-inner\">&lt;img class=\"progressiveMedia-noscript js-progressiveMedia-inner\" src=\"https://cdn-images-1.medium.com/max/2000/1*j4oOOKFcBCmSOfVlAx5UTA.jpeg\"&gt;</noscript></div></div><figcaption class=\"imageCaption\">That’s how awesome I feel when I write tests in TypeScript</figcaption></figure></div><div class=\"section-inner sectionLayout--insetColumn\"><p name=\"e0bf\" id=\"e0bf\" class=\"graf graf--p graf-after--figure\"><a href=\"http://typescriptlang.org\" data-href=\"http://typescriptlang.org\" class=\"markup--anchor markup--p-anchor\" rel=\"noopener\" target=\"_blank\">TypeScript </a>has gotten so much better in the last year, and so many new applications and projects are built on top its awesomeness. Its first-class integration and support in <a href=\"http://code.visualstudio.com\" data-href=\"http://code.visualstudio.com\" class=\"markup--anchor markup--p-anchor\" rel=\"noopener\" target=\"_blank\">Visual Studio Code</a> helps a lot, and I think TypeScript as a language is here to stay, despite some people having their misgivings.</p><p name=\"09b8\" id=\"09b8\" class=\"graf graf--p graf-after--p\">The usual process is to write code in TypeScript, and have it compiled to JavaScript, and then served to the browser as a JavaScript file. We usually only have to test the JavaScript files that are emitted by the TypeScript compiler. But wouldn’t it be so much easier just to use TypeScript to do our unit tests? We could use the same syntax, we wouldn’t have to worry about having JavaScript sources for tests, and TypeScript sources for the app. It’s just so much better.</p><p name=\"28e2\" id=\"28e2\" class=\"graf graf--p graf-after--p\">But, how do we do it?</p><h4 name=\"6667\" id=\"6667\" class=\"graf graf--h4 graf-after--p\">Installing the development dependencies</h4><p name=\"127d\" id=\"127d\" class=\"graf graf--p graf-after--h4\"><em class=\"markup--em markup--p-em\">A few simple tools to get us started — mocha, chai, and ts-node</em></p><p name=\"54e4\" id=\"54e4\" class=\"graf graf--p graf-after--p\">I have looked around, and I’ve found that <a href=\"http://mochajs.org\" data-href=\"http://mochajs.org\" class=\"markup--anchor markup--p-anchor\" rel=\"noopener\" target=\"_blank\">mocha</a> is a good fit as a testing framework, and <a href=\"http://chaijs.com\" data-href=\"http://chaijs.com\" class=\"markup--anchor markup--p-anchor\" rel=\"noopener\" target=\"_blank\">chai</a> as an assertion library. I like the <a href=\"http://chaijs.com/guide/styles/#expect\" data-href=\"http://chaijs.com/guide/styles/#expect\" class=\"markup--anchor markup--p-anchor\" rel=\"noopener\" target=\"_blank\">expect </a>style of assertions more, and I like that chai has it. These are just 2 tools, and we can probably explore and find more tools. But these are simple and get the job done, and work with TypeScript.</p><p name=\"cddc\" id=\"cddc\" class=\"graf graf--p graf-after--p\">As of writing, Ava (which is a framework I really like for its parallel testing capabilities) doesn’t have first-class TypeScript support. And I don’t like the idea of using yet another transpiler like Babel when I already have the TypeScript compiler. So, let’s start with mocha and chai.</p><p name=\"cd49\" id=\"cd49\" class=\"graf graf--p graf-after--p\">The node package manager, fondly called npm, has had its own share of improvements. The version 5 makes it unnecessary to use a package manager like yarn, so we can stick to it. We need to install a couple of things, and I’ll explain them as we go.</p><figure name=\"faad\" id=\"faad\" class=\"graf graf--figure graf--iframe graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 8.571%;\"></div><div class=\"progressiveMedia js-progressiveMedia is-canvasLoaded is-imageLoaded\" data-scroll=\"native\"><img src=\"https://i.embed.ly/1/display/resize?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;width=40\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"75\"></canvas><div class=\"iframeContainer\"><iframe width=\"200\" height=\"71\" data-src=\"/media/46f0f788c01c4b194cefde2d9ec41eaf?postId=384ef05f32b2\" data-media-id=\"46f0f788c01c4b194cefde2d9ec41eaf\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07\" class=\"progressiveMedia-iframe js-progressiveMedia-iframe\" allowfullscreen=\"\" frameborder=\"0\" src=\"/media/46f0f788c01c4b194cefde2d9ec41eaf?postId=384ef05f32b2\"></iframe></div><noscript class=\"js-progressiveMedia-inner\">&lt;div class=\"iframeContainer\"&gt;&lt;IFRAME width=\"200\" height=\"71\" src=\"/media/46f0f788c01c4b194cefde2d9ec41eaf?postId=384ef05f32b2\" data-media-id=\"46f0f788c01c4b194cefde2d9ec41eaf\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;amp;key=a19fcc184b9711e1b4764040d3dc5c07\" allowfullscreen frameborder=\"0\"&gt;&lt;/IFRAME&gt;&lt;/div&gt;</noscript></div></div></figure><p name=\"a6dd\" id=\"a6dd\" class=\"graf graf--p graf-after--figure\">The additional packages are type definitions for mocha and chai, and <a href=\"https://github.com/TypeStrong/ts-node\" data-href=\"https://github.com/TypeStrong/ts-node\" class=\"markup--anchor markup--p-anchor\" rel=\"noopener\" target=\"_blank\">ts-node</a>, a TypeScript execution environment for node. We will not be needing type definitions for ts-node, as it is not a package we will import and use in our TypeScript files.</p><h4 name=\"cd71\" id=\"cd71\" class=\"graf graf--h4 graf-after--p\">Writing our first TypeScript test</h4><p name=\"9445\" id=\"9445\" class=\"graf graf--p graf-after--h4\"><em class=\"markup--em markup--p-em\">It’s really easy — and not much different from how we write tests otherwise</em></p><p name=\"fa40\" id=\"fa40\" class=\"graf graf--p graf-after--p\">For the sake of writing our first test, let’s write some code:</p><figure name=\"98bf\" id=\"98bf\" class=\"graf graf--figure graf--iframe graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 8.571%;\"></div><div class=\"progressiveMedia js-progressiveMedia is-canvasLoaded is-imageLoaded\" data-scroll=\"native\"><img src=\"https://i.embed.ly/1/display/resize?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;width=40\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"75\"></canvas><div class=\"iframeContainer\"><iframe width=\"200\" height=\"71\" data-src=\"/media/dac0a6422059288f196c2a0dd83d4f1e?postId=384ef05f32b2\" data-media-id=\"dac0a6422059288f196c2a0dd83d4f1e\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07\" class=\"progressiveMedia-iframe js-progressiveMedia-iframe\" allowfullscreen=\"\" frameborder=\"0\" src=\"/media/dac0a6422059288f196c2a0dd83d4f1e?postId=384ef05f32b2\"></iframe></div><noscript class=\"js-progressiveMedia-inner\">&lt;div class=\"iframeContainer\"&gt;&lt;IFRAME width=\"200\" height=\"71\" src=\"/media/dac0a6422059288f196c2a0dd83d4f1e?postId=384ef05f32b2\" data-media-id=\"dac0a6422059288f196c2a0dd83d4f1e\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;amp;key=a19fcc184b9711e1b4764040d3dc5c07\" allowfullscreen frameborder=\"0\"&gt;&lt;/IFRAME&gt;&lt;/div&gt;</noscript></div></div></figure><p name=\"58cd\" id=\"58cd\" class=\"graf graf--p graf-after--figure\">Now that we have a function to test, let’s write our first TypeScript test:</p><figure name=\"0d72\" id=\"0d72\" class=\"graf graf--figure graf--iframe graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 43.143%;\"></div><div class=\"progressiveMedia js-progressiveMedia is-canvasLoaded is-imageLoaded\" data-scroll=\"native\"><img src=\"https://i.embed.ly/1/display/resize?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;width=40\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"75\"></canvas><div class=\"iframeContainer\"><iframe width=\"200\" height=\"71\" data-src=\"/media/3250d51ccec4df3da4f3447892218065?postId=384ef05f32b2\" data-media-id=\"3250d51ccec4df3da4f3447892218065\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07\" class=\"progressiveMedia-iframe js-progressiveMedia-iframe\" allowfullscreen=\"\" frameborder=\"0\" src=\"/media/3250d51ccec4df3da4f3447892218065?postId=384ef05f32b2\"></iframe></div><noscript class=\"js-progressiveMedia-inner\">&lt;div class=\"iframeContainer\"&gt;&lt;IFRAME width=\"200\" height=\"71\" src=\"/media/3250d51ccec4df3da4f3447892218065?postId=384ef05f32b2\" data-media-id=\"3250d51ccec4df3da4f3447892218065\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;amp;key=a19fcc184b9711e1b4764040d3dc5c07\" allowfullscreen frameborder=\"0\"&gt;&lt;/IFRAME&gt;&lt;/div&gt;</noscript></div></div></figure><h4 name=\"bfa2\" id=\"bfa2\" class=\"graf graf--h4 graf-after--figure\">Running our unit&nbsp;tests</h4><p name=\"e93f\" id=\"e93f\" class=\"graf graf--p graf-after--h4\"><em class=\"markup--em markup--p-em\">It’s as simple as calling mocha now as usual, with ts-node</em></p><p name=\"01c5\" id=\"01c5\" class=\"graf graf--p graf-after--p\">Remember how we use mocha to run our tests? We create an npm script that calls mocha with the path as a parameter. That’s the same thing we’re about to do. The only change is that instead of letting node run mocha, we’re gonna register ts-node to run mocha.</p><figure name=\"ab4a\" id=\"ab4a\" class=\"graf graf--figure graf--iframe graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 21.143%;\"></div><div class=\"progressiveMedia js-progressiveMedia is-canvasLoaded is-imageLoaded\" data-scroll=\"native\"><img src=\"https://i.embed.ly/1/display/resize?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;width=40\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"75\"></canvas><div class=\"iframeContainer\"><iframe width=\"200\" height=\"71\" data-src=\"/media/70620a582825b3f69261a46fda6f1a8f?postId=384ef05f32b2\" data-media-id=\"70620a582825b3f69261a46fda6f1a8f\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07\" class=\"progressiveMedia-iframe js-progressiveMedia-iframe\" allowfullscreen=\"\" frameborder=\"0\" src=\"/media/70620a582825b3f69261a46fda6f1a8f?postId=384ef05f32b2\"></iframe></div><noscript class=\"js-progressiveMedia-inner\">&lt;div class=\"iframeContainer\"&gt;&lt;IFRAME width=\"200\" height=\"71\" src=\"/media/70620a582825b3f69261a46fda6f1a8f?postId=384ef05f32b2\" data-media-id=\"70620a582825b3f69261a46fda6f1a8f\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;amp;key=a19fcc184b9711e1b4764040d3dc5c07\" allowfullscreen frameborder=\"0\"&gt;&lt;/IFRAME&gt;&lt;/div&gt;</noscript></div></div></figure><p name=\"27e7\" id=\"27e7\" class=\"graf graf--p graf-after--figure\">Here’s a sample output:</p><figure name=\"c2b2\" id=\"c2b2\" class=\"graf graf--figure graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\" style=\"max-width: 700px; max-height: 289px;\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 41.3%;\"></div><div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*2UKUPrs2L1Q70lRSN49AwA.jpeg\" data-width=\"1570\" data-height=\"648\" data-action=\"zoom\" data-action-value=\"1*2UKUPrs2L1Q70lRSN49AwA.jpeg\" data-scroll=\"native\"><img src=\"https://cdn-images-1.medium.com/freeze/max/30/1*2UKUPrs2L1Q70lRSN49AwA.jpeg?q=20\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"30\"></canvas><img class=\"progressiveMedia-image js-progressiveMedia-image\" data-src=\"https://cdn-images-1.medium.com/max/800/1*2UKUPrs2L1Q70lRSN49AwA.jpeg\" src=\"https://cdn-images-1.medium.com/max/800/1*2UKUPrs2L1Q70lRSN49AwA.jpeg\"><noscript class=\"js-progressiveMedia-inner\">&lt;img class=\"progressiveMedia-noscript js-progressiveMedia-inner\" src=\"https://cdn-images-1.medium.com/max/800/1*2UKUPrs2L1Q70lRSN49AwA.jpeg\"&gt;</noscript></div></div></figure><h4 name=\"9f90\" id=\"9f90\" class=\"graf graf--h4 graf-after--figure\">Quirks with client side applications</h4><p name=\"1d24\" id=\"1d24\" class=\"graf graf--p graf-after--h4\"><em class=\"markup--em markup--p-em\">A few kinks to iron out when testing client side applications</em></p><p name=\"c50f\" id=\"c50f\" class=\"graf graf--p graf-after--p\">Recently when I wanted to test a client side application, it didn’t go so smoothly. I was using <a href=\"https://webpack.js.org/\" data-href=\"https://webpack.js.org/\" class=\"markup--anchor markup--p-anchor\" rel=\"noopener\" target=\"_blank\">webpack</a> — which is an amazing module bundler, by the way — to import styles into files which declared components, and I found out that I could no longer unit test those components with what I’ve described above.</p><p name=\"1b28\" id=\"1b28\" class=\"graf graf--p graf-after--p\">Here’s an example. Let’s add a styles.scss file to the mix:</p><figure name=\"3759\" id=\"3759\" class=\"graf graf--figure graf--iframe graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 14.857%;\"></div><div class=\"progressiveMedia js-progressiveMedia is-canvasLoaded is-imageLoaded\" data-scroll=\"native\"><img src=\"https://i.embed.ly/1/display/resize?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;width=40\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"75\"></canvas><div class=\"iframeContainer\"><iframe width=\"200\" height=\"71\" data-src=\"/media/af8d9ace95e6e79747acd19e5e659169?postId=384ef05f32b2\" data-media-id=\"af8d9ace95e6e79747acd19e5e659169\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07\" class=\"progressiveMedia-iframe js-progressiveMedia-iframe\" allowfullscreen=\"\" frameborder=\"0\" src=\"/media/af8d9ace95e6e79747acd19e5e659169?postId=384ef05f32b2\"></iframe></div><noscript class=\"js-progressiveMedia-inner\">&lt;div class=\"iframeContainer\"&gt;&lt;IFRAME width=\"200\" height=\"71\" src=\"/media/af8d9ace95e6e79747acd19e5e659169?postId=384ef05f32b2\" data-media-id=\"af8d9ace95e6e79747acd19e5e659169\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;amp;key=a19fcc184b9711e1b4764040d3dc5c07\" allowfullscreen frameborder=\"0\"&gt;&lt;/IFRAME&gt;&lt;/div&gt;</noscript></div></div></figure><figure name=\"79d6\" id=\"79d6\" class=\"graf graf--figure graf--iframe graf-after--figure\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 14.857%;\"></div><div class=\"progressiveMedia js-progressiveMedia is-canvasLoaded is-imageLoaded\" data-scroll=\"native\"><img src=\"https://i.embed.ly/1/display/resize?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;width=40\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"75\"></canvas><div class=\"iframeContainer\"><iframe width=\"200\" height=\"71\" data-src=\"/media/1332267fe1665fafdc8c0d9f8c8d5d98?postId=384ef05f32b2\" data-media-id=\"1332267fe1665fafdc8c0d9f8c8d5d98\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07\" class=\"progressiveMedia-iframe js-progressiveMedia-iframe\" allowfullscreen=\"\" frameborder=\"0\" src=\"/media/1332267fe1665fafdc8c0d9f8c8d5d98?postId=384ef05f32b2\"></iframe></div><noscript class=\"js-progressiveMedia-inner\">&lt;div class=\"iframeContainer\"&gt;&lt;IFRAME width=\"200\" height=\"71\" src=\"/media/1332267fe1665fafdc8c0d9f8c8d5d98?postId=384ef05f32b2\" data-media-id=\"1332267fe1665fafdc8c0d9f8c8d5d98\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;amp;key=a19fcc184b9711e1b4764040d3dc5c07\" allowfullscreen frameborder=\"0\"&gt;&lt;/IFRAME&gt;&lt;/div&gt;</noscript></div></div></figure><p name=\"9a32\" id=\"9a32\" class=\"graf graf--p graf-after--figure\">Now, the file to be tested imports a stylesheet. This will be processed by webpack when it is used to compile static assets and does its work as a module bundler. It has to be in the code. I cannot separate this out into another file. But if it exists, ts-node cannot import the stylesheet as it isn’t a valid TypeScript file. We run into an error if we try to run the test script.</p><p name=\"1489\" id=\"1489\" class=\"graf graf--p graf-after--p\">Time to add another package to solve the problem. And it’s very aptly named:</p><figure name=\"6a6b\" id=\"6a6b\" class=\"graf graf--figure graf--iframe graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 8.571%;\"></div><div class=\"progressiveMedia js-progressiveMedia is-canvasLoaded is-imageLoaded\" data-scroll=\"native\"><img src=\"https://i.embed.ly/1/display/resize?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;width=40\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"75\"></canvas><div class=\"iframeContainer\"><iframe width=\"200\" height=\"71\" data-src=\"/media/48a721a0e2b65d851322f94f6bd4d020?postId=384ef05f32b2\" data-media-id=\"48a721a0e2b65d851322f94f6bd4d020\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07\" class=\"progressiveMedia-iframe js-progressiveMedia-iframe\" allowfullscreen=\"\" frameborder=\"0\" src=\"/media/48a721a0e2b65d851322f94f6bd4d020?postId=384ef05f32b2\"></iframe></div><noscript class=\"js-progressiveMedia-inner\">&lt;div class=\"iframeContainer\"&gt;&lt;IFRAME width=\"200\" height=\"71\" src=\"/media/48a721a0e2b65d851322f94f6bd4d020?postId=384ef05f32b2\" data-media-id=\"48a721a0e2b65d851322f94f6bd4d020\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;amp;key=a19fcc184b9711e1b4764040d3dc5c07\" allowfullscreen frameborder=\"0\"&gt;&lt;/IFRAME&gt;&lt;/div&gt;</noscript></div></div></figure><p name=\"30e3\" id=\"30e3\" class=\"graf graf--p graf-after--figure\">And, we need to update our test script:</p><figure name=\"05a6\" id=\"05a6\" class=\"graf graf--figure graf--iframe graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 14.857%;\"></div><div class=\"progressiveMedia js-progressiveMedia is-canvasLoaded is-imageLoaded\" data-scroll=\"native\"><img src=\"https://i.embed.ly/1/display/resize?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;width=40\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"75\"></canvas><div class=\"iframeContainer\"><iframe width=\"200\" height=\"71\" data-src=\"/media/076fa5fbed4eb57c0501fa4cbf5855b3?postId=384ef05f32b2\" data-media-id=\"076fa5fbed4eb57c0501fa4cbf5855b3\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07\" class=\"progressiveMedia-iframe js-progressiveMedia-iframe\" allowfullscreen=\"\" frameborder=\"0\" src=\"/media/076fa5fbed4eb57c0501fa4cbf5855b3?postId=384ef05f32b2\"></iframe></div><noscript class=\"js-progressiveMedia-inner\">&lt;div class=\"iframeContainer\"&gt;&lt;IFRAME width=\"200\" height=\"71\" src=\"/media/076fa5fbed4eb57c0501fa4cbf5855b3?postId=384ef05f32b2\" data-media-id=\"076fa5fbed4eb57c0501fa4cbf5855b3\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;amp;key=a19fcc184b9711e1b4764040d3dc5c07\" allowfullscreen frameborder=\"0\"&gt;&lt;/IFRAME&gt;&lt;/div&gt;</noscript></div></div></figure><p name=\"4251\" id=\"4251\" class=\"graf graf--p graf-after--figure\">Now, our tests pass:</p><figure name=\"6d1e\" id=\"6d1e\" class=\"graf graf--figure graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\" style=\"max-width: 700px; max-height: 242px;\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 34.599999999999994%;\"></div><div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*7Qc29FhgGKNmmlOsUPdPTg.jpeg\" data-width=\"1462\" data-height=\"506\" data-action=\"zoom\" data-action-value=\"1*7Qc29FhgGKNmmlOsUPdPTg.jpeg\" data-scroll=\"native\"><img src=\"https://cdn-images-1.medium.com/freeze/max/30/1*7Qc29FhgGKNmmlOsUPdPTg.jpeg?q=20\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"25\"></canvas><img class=\"progressiveMedia-image js-progressiveMedia-image\" data-src=\"https://cdn-images-1.medium.com/max/800/1*7Qc29FhgGKNmmlOsUPdPTg.jpeg\" src=\"https://cdn-images-1.medium.com/max/800/1*7Qc29FhgGKNmmlOsUPdPTg.jpeg\"><noscript class=\"js-progressiveMedia-inner\">&lt;img class=\"progressiveMedia-noscript js-progressiveMedia-inner\" src=\"https://cdn-images-1.medium.com/max/800/1*7Qc29FhgGKNmmlOsUPdPTg.jpeg\"&gt;</noscript></div></div></figure><p name=\"d510\" id=\"d510\" class=\"graf graf--p graf-after--figure\">If we reference window, or the DOM, in our code (client side application, right?), that opens up new errors for us, because ts-node does not know about the window or the DOM. And it’s very common to use them, and so it’s easy to run into these issues (as I found out).</p><p name=\"cbf9\" id=\"cbf9\" class=\"graf graf--p graf-after--p\">This time, we just try to reference window:</p><blockquote name=\"e7bb\" id=\"e7bb\" class=\"graf graf--blockquote graf-after--p\">This is a simple way to introduce an error in our tests for referencing window. Do NOT do this in your app.</blockquote><figure name=\"e8e0\" id=\"e8e0\" class=\"graf graf--figure graf--iframe graf-after--blockquote\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 21.143%;\"></div><div class=\"progressiveMedia js-progressiveMedia is-canvasLoaded is-imageLoaded\" data-scroll=\"native\"><img src=\"https://i.embed.ly/1/display/resize?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;width=40\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"75\"></canvas><div class=\"iframeContainer\"><iframe width=\"200\" height=\"71\" data-src=\"/media/cfc3fc50133fc06fb8cee86ac2292ea1?postId=384ef05f32b2\" data-media-id=\"cfc3fc50133fc06fb8cee86ac2292ea1\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07\" class=\"progressiveMedia-iframe js-progressiveMedia-iframe\" allowfullscreen=\"\" frameborder=\"0\" src=\"/media/cfc3fc50133fc06fb8cee86ac2292ea1?postId=384ef05f32b2\"></iframe></div><noscript class=\"js-progressiveMedia-inner\">&lt;div class=\"iframeContainer\"&gt;&lt;IFRAME width=\"200\" height=\"71\" src=\"/media/cfc3fc50133fc06fb8cee86ac2292ea1?postId=384ef05f32b2\" data-media-id=\"cfc3fc50133fc06fb8cee86ac2292ea1\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;amp;key=a19fcc184b9711e1b4764040d3dc5c07\" allowfullscreen frameborder=\"0\"&gt;&lt;/IFRAME&gt;&lt;/div&gt;</noscript></div></div></figure><p name=\"2c12\" id=\"2c12\" class=\"graf graf--p graf-after--figure\">Now, when we try to run our tests:</p><figure name=\"e5b7\" id=\"e5b7\" class=\"graf graf--figure graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\" style=\"max-width: 700px; max-height: 278px;\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 39.6%;\"></div><div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*73vMwKOD_5EKk1JnH-MtRA.jpeg\" data-width=\"1637\" data-height=\"649\" data-action=\"zoom\" data-action-value=\"1*73vMwKOD_5EKk1JnH-MtRA.jpeg\" data-scroll=\"native\"><img src=\"https://cdn-images-1.medium.com/freeze/max/30/1*73vMwKOD_5EKk1JnH-MtRA.jpeg?q=20\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"27\"></canvas><img class=\"progressiveMedia-image js-progressiveMedia-image\" data-src=\"https://cdn-images-1.medium.com/max/800/1*73vMwKOD_5EKk1JnH-MtRA.jpeg\" src=\"https://cdn-images-1.medium.com/max/800/1*73vMwKOD_5EKk1JnH-MtRA.jpeg\"><noscript class=\"js-progressiveMedia-inner\">&lt;img class=\"progressiveMedia-noscript js-progressiveMedia-inner\" src=\"https://cdn-images-1.medium.com/max/800/1*73vMwKOD_5EKk1JnH-MtRA.jpeg\"&gt;</noscript></div></div></figure><p name=\"6e82\" id=\"6e82\" class=\"graf graf--p graf-after--figure\">Boom! Okay, so let’s fix this. It’s as you expect — more packages. This time, we need 2:</p><figure name=\"cf9a\" id=\"cf9a\" class=\"graf graf--figure graf--iframe graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 8.571%;\"></div><div class=\"progressiveMedia js-progressiveMedia is-canvasLoaded is-imageLoaded\" data-scroll=\"native\"><img src=\"https://i.embed.ly/1/display/resize?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;width=40\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"75\"></canvas><div class=\"iframeContainer\"><iframe width=\"200\" height=\"71\" data-src=\"/media/8d779a252338df599e9ee821cd24e492?postId=384ef05f32b2\" data-media-id=\"8d779a252338df599e9ee821cd24e492\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07\" class=\"progressiveMedia-iframe js-progressiveMedia-iframe\" allowfullscreen=\"\" frameborder=\"0\" src=\"/media/8d779a252338df599e9ee821cd24e492?postId=384ef05f32b2\"></iframe></div><noscript class=\"js-progressiveMedia-inner\">&lt;div class=\"iframeContainer\"&gt;&lt;IFRAME width=\"200\" height=\"71\" src=\"/media/8d779a252338df599e9ee821cd24e492?postId=384ef05f32b2\" data-media-id=\"8d779a252338df599e9ee821cd24e492\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;amp;key=a19fcc184b9711e1b4764040d3dc5c07\" allowfullscreen frameborder=\"0\"&gt;&lt;/IFRAME&gt;&lt;/div&gt;</noscript></div></div></figure><p name=\"10cb\" id=\"10cb\" class=\"graf graf--p graf-after--figure\">And, we need to update our test script:</p><figure name=\"2c50\" id=\"2c50\" class=\"graf graf--figure graf--iframe graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 21.143%;\"></div><div class=\"progressiveMedia js-progressiveMedia is-canvasLoaded is-imageLoaded\" data-scroll=\"native\"><img src=\"https://i.embed.ly/1/display/resize?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;width=40\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"75\"></canvas><div class=\"iframeContainer\"><iframe width=\"200\" height=\"71\" data-src=\"/media/5704b996be3ebc61c4f6788571c2e2ca?postId=384ef05f32b2\" data-media-id=\"5704b996be3ebc61c4f6788571c2e2ca\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07\" class=\"progressiveMedia-iframe js-progressiveMedia-iframe\" allowfullscreen=\"\" frameborder=\"0\" src=\"/media/5704b996be3ebc61c4f6788571c2e2ca?postId=384ef05f32b2\"></iframe></div><noscript class=\"js-progressiveMedia-inner\">&lt;div class=\"iframeContainer\"&gt;&lt;IFRAME width=\"200\" height=\"71\" src=\"/media/5704b996be3ebc61c4f6788571c2e2ca?postId=384ef05f32b2\" data-media-id=\"5704b996be3ebc61c4f6788571c2e2ca\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;amp;key=a19fcc184b9711e1b4764040d3dc5c07\" allowfullscreen frameborder=\"0\"&gt;&lt;/IFRAME&gt;&lt;/div&gt;</noscript></div></div></figure><p name=\"df3c\" id=\"df3c\" class=\"graf graf--p graf-after--figure\">Here’s our output:</p><figure name=\"1a7c\" id=\"1a7c\" class=\"graf graf--figure graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\" style=\"max-width: 700px; max-height: 244px;\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 34.9%;\"></div><div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*ycnK0yZP_i8_3LKUAI4fDw.jpeg\" data-width=\"1487\" data-height=\"519\" data-action=\"zoom\" data-action-value=\"1*ycnK0yZP_i8_3LKUAI4fDw.jpeg\" data-scroll=\"native\"><img src=\"https://cdn-images-1.medium.com/freeze/max/30/1*ycnK0yZP_i8_3LKUAI4fDw.jpeg?q=20\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"25\"></canvas><img class=\"progressiveMedia-image js-progressiveMedia-image\" data-src=\"https://cdn-images-1.medium.com/max/800/1*ycnK0yZP_i8_3LKUAI4fDw.jpeg\" src=\"https://cdn-images-1.medium.com/max/800/1*ycnK0yZP_i8_3LKUAI4fDw.jpeg\"><noscript class=\"js-progressiveMedia-inner\">&lt;img class=\"progressiveMedia-noscript js-progressiveMedia-inner\" src=\"https://cdn-images-1.medium.com/max/800/1*ycnK0yZP_i8_3LKUAI4fDw.jpeg\"&gt;</noscript></div></div></figure><p name=\"dfc4\" id=\"dfc4\" class=\"graf graf--p graf-after--figure\">Great, our tests are passing again.</p><p name=\"bceb\" id=\"bceb\" class=\"graf graf--p graf-after--p\">You’d think that was all. But there’s more. But this is very specific, so you might not need it. This is only required if you’re using <a href=\"https://webpack.js.org/guides/code-splitting/\" data-href=\"https://webpack.js.org/guides/code-splitting/\" class=\"markup--anchor markup--p-anchor\" rel=\"noopener\" target=\"_blank\">webpack’s code splitting feature</a> with TypeScript. You can skip ahead to the next heading if this doesn’t apply to you.</p><p name=\"64d7\" id=\"64d7\" class=\"graf graf--p graf-after--p\">While webpack allows code splitting via dynamic imports with System.import(), TypeScript needs some configuration in order to output the right JavaScript that webpack can process as dynamic import for code splitting. In order to get it right, you need to change your tsconfig.json slightly. Typically, your tsconfig.json looks like this, when you need code splitting in webpack:</p><figure name=\"7ab5\" id=\"7ab5\" class=\"graf graf--figure graf--iframe graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 62%;\"></div><div class=\"progressiveMedia js-progressiveMedia is-canvasLoaded is-imageLoaded\" data-scroll=\"native\"><img src=\"https://i.embed.ly/1/display/resize?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;width=40\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"75\"></canvas><div class=\"iframeContainer\"><iframe width=\"200\" height=\"71\" data-src=\"/media/264d5a80d834f9976dbec6e2fd721062?postId=384ef05f32b2\" data-media-id=\"264d5a80d834f9976dbec6e2fd721062\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07\" class=\"progressiveMedia-iframe js-progressiveMedia-iframe\" allowfullscreen=\"\" frameborder=\"0\" src=\"/media/264d5a80d834f9976dbec6e2fd721062?postId=384ef05f32b2\"></iframe></div><noscript class=\"js-progressiveMedia-inner\">&lt;div class=\"iframeContainer\"&gt;&lt;IFRAME width=\"200\" height=\"71\" src=\"/media/264d5a80d834f9976dbec6e2fd721062?postId=384ef05f32b2\" data-media-id=\"264d5a80d834f9976dbec6e2fd721062\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;amp;key=a19fcc184b9711e1b4764040d3dc5c07\" allowfullscreen frameborder=\"0\"&gt;&lt;/IFRAME&gt;&lt;/div&gt;</noscript></div></div></figure><p name=\"5ddc\" id=\"5ddc\" class=\"graf graf--p graf-after--figure\">The important parts are the <strong class=\"markup--strong markup--p-strong\">module </strong>and <strong class=\"markup--strong markup--p-strong\">moduleResolution</strong>. The value for <strong class=\"markup--strong markup--p-strong\">module</strong> is usually left as <strong class=\"markup--strong markup--p-strong\">commonjs</strong>, but for code splitting to work, we need to change it to <strong class=\"markup--strong markup--p-strong\">esnext</strong>. And this will cause problems for our unit tests. To fix this, we need to change the <strong class=\"markup--strong markup--p-strong\">module</strong> back to <strong class=\"markup--strong markup--p-strong\">commonjs</strong> when running mocha with ts-node. I recommend using <strong class=\"markup--strong markup--p-strong\">cross-env</strong> to do this, as it provides for cross-platform support.</p><p name=\"8f43\" id=\"8f43\" class=\"graf graf--p graf-after--p\">Time to install a package:</p><figure name=\"a9a9\" id=\"a9a9\" class=\"graf graf--figure graf--iframe graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 8.571%;\"></div><div class=\"progressiveMedia js-progressiveMedia is-canvasLoaded is-imageLoaded\" data-scroll=\"native\"><img src=\"https://i.embed.ly/1/display/resize?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;width=40\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"75\"></canvas><div class=\"iframeContainer\"><iframe width=\"200\" height=\"71\" data-src=\"/media/492bacc690c54aa549a96b849fa572ed?postId=384ef05f32b2\" data-media-id=\"492bacc690c54aa549a96b849fa572ed\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07\" class=\"progressiveMedia-iframe js-progressiveMedia-iframe\" allowfullscreen=\"\" frameborder=\"0\" src=\"/media/492bacc690c54aa549a96b849fa572ed?postId=384ef05f32b2\"></iframe></div><noscript class=\"js-progressiveMedia-inner\">&lt;div class=\"iframeContainer\"&gt;&lt;IFRAME width=\"200\" height=\"71\" src=\"/media/492bacc690c54aa549a96b849fa572ed?postId=384ef05f32b2\" data-media-id=\"492bacc690c54aa549a96b849fa572ed\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;amp;key=a19fcc184b9711e1b4764040d3dc5c07\" allowfullscreen frameborder=\"0\"&gt;&lt;/IFRAME&gt;&lt;/div&gt;</noscript></div></div></figure><p name=\"df1c\" id=\"df1c\" class=\"graf graf--p graf-after--figure\">We change our test script to provide the correct value for module for ts-node and mocha to work their magic with our TypeScript tests:</p><figure name=\"bab6\" id=\"bab6\" class=\"graf graf--figure graf--iframe graf-after--p\"><div class=\"aspectRatioPlaceholder is-locked\"><div class=\"aspectRatioPlaceholder-fill\" style=\"padding-bottom: 21.143%;\"></div><div class=\"progressiveMedia js-progressiveMedia is-canvasLoaded is-imageLoaded\" data-scroll=\"native\"><img src=\"https://i.embed.ly/1/display/resize?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;width=40\" crossorigin=\"anonymous\" class=\"progressiveMedia-thumbnail js-progressiveMedia-thumbnail\"><canvas class=\"progressiveMedia-canvas js-progressiveMedia-canvas\" width=\"75\" height=\"75\"></canvas><div class=\"iframeContainer\"><iframe width=\"200\" height=\"71\" data-src=\"/media/3bae3235c7b64d8e09ceda4168c033e3?postId=384ef05f32b2\" data-media-id=\"3bae3235c7b64d8e09ceda4168c033e3\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;key=a19fcc184b9711e1b4764040d3dc5c07\" class=\"progressiveMedia-iframe js-progressiveMedia-iframe\" allowfullscreen=\"\" frameborder=\"0\" src=\"/media/3bae3235c7b64d8e09ceda4168c033e3?postId=384ef05f32b2\"></iframe></div><noscript class=\"js-progressiveMedia-inner\">&lt;div class=\"iframeContainer\"&gt;&lt;IFRAME width=\"200\" height=\"71\" src=\"/media/3bae3235c7b64d8e09ceda4168c033e3?postId=384ef05f32b2\" data-media-id=\"3bae3235c7b64d8e09ceda4168c033e3\" data-thumbnail=\"https://i.embed.ly/1/image?url=https%3A%2F%2Favatars1.githubusercontent.com%2Fu%2F3091087%3Fv%3D4%26s%3D400&amp;amp;key=a19fcc184b9711e1b4764040d3dc5c07\" allowfullscreen frameborder=\"0\"&gt;&lt;/IFRAME&gt;&lt;/div&gt;</noscript></div></div></figure><p name=\"ce73\" id=\"ce73\" class=\"graf graf--p graf-after--figure graf--trailing\">We fix the module by setting an environment variable called TS_NODE_COMPILER_OPTIONS, and things start working again.</p></div></div></section><section name=\"995a\" class=\"section section--body section--last\"><div class=\"section-divider\"><hr class=\"section-divider\"></div><div class=\"section-content\"><div class=\"section-inner sectionLayout--insetColumn\"><h4 name=\"b52d\" id=\"b52d\" class=\"graf graf--h4 graf--leading\">Writing more tests in TypeScript</h4><p name=\"469b\" id=\"469b\" class=\"graf graf--p graf-after--h4\"><em class=\"markup--em markup--p-em\">Well, we’re there now, and it’s all over. We just need to keep adding tests now.</em></p><p name=\"596a\" id=\"596a\" class=\"graf graf--p graf-after--p\">It’s been a long post, but I hope you found it useful. And I hope you write your tests in TypeScript henceforth.</p><p name=\"6bd7\" id=\"6bd7\" class=\"graf graf--p graf-after--p\">What do you think?</p><p name=\"2a66\" id=\"2a66\" class=\"graf graf--p graf-after--p\">Did this work for you?<br>Does having type definitions in your tests help?<br>Could I have done something better?<br>Have I missed something?</p><p name=\"12da\" id=\"12da\" class=\"graf graf--p graf-after--p\">Please share your thoughts using comments on this post. Also let me know if there are particular things that you would enjoy reading further.</p><p name=\"a043\" id=\"a043\" class=\"graf graf--p graf-after--p graf--trailing\">Cheers!</p></div></div></section></div><footer class=\"u-paddingTop10\"><div class=\"container u-maxWidth740\"><div class=\"row\"><div class=\"col u-size12of12\"></div></div><div class=\"row\"><div class=\"col u-size12of12 js-postTags\"><div class=\"u-paddingBottom10\"><ul class=\"tags tags--postTags tags--borderless\"><li><a class=\"link u-baseColor--link\" href=\"https://journal.artfuldev.com/tagged/javascript?source=post\" data-action-source=\"post\" data-collection-slug=\"the-journal-of-artful-development\">JavaScript</a></li><li><a class=\"link u-baseColor--link\" href=\"https://journal.artfuldev.com/tagged/typescript?source=post\" data-action-source=\"post\" data-collection-slug=\"the-journal-of-artful-development\">Typescript</a></li><li><a class=\"link u-baseColor--link\" href=\"https://journal.artfuldev.com/tagged/mocha?source=post\" data-action-source=\"post\" data-collection-slug=\"the-journal-of-artful-development\">Mocha</a></li><li><a class=\"link u-baseColor--link\" href=\"https://journal.artfuldev.com/tagged/chai?source=post\" data-action-source=\"post\" data-collection-slug=\"the-journal-of-artful-development\">Chai</a></li><li><a class=\"link u-baseColor--link\" href=\"https://journal.artfuldev.com/tagged/testing?source=post\" data-action-source=\"post\" data-collection-slug=\"the-journal-of-artful-development\">Testing</a></li></ul></div></div></div><section class=\"uiScale uiScale-ui--small uiScale-caption--regular u-borderTopLightest u-marginTop10 u-paddingTop20\"><div class=\"ui-h3 u-textColorDarker u-fontSize22\">Like what you read? Give Sudarsan Balaji a round of applause.</div><p class=\"ui-body u-marginBottom20 u-textColorDark u-fontSize16\">From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.</p></section><div class=\"postActions js-postActionsFooter\"><div class=\"u-flexCenter\"><div class=\"u-flex1\"><div class=\"multirecommend js-actionMultirecommend u-flexCenter u-width60\" data-post-id=\"384ef05f32b2\" data-is-icon-29px=\"true\" data-is-circle=\"true\" data-has-recommend-list=\"true\" data-source=\"post_actions_footer-----384ef05f32b2---------------------clap_footer\"><div class=\"u-relative u-foreground\"><button class=\"button button--large button--circle button--withChrome u-baseColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--largePill u-relative u-foreground u-xs-paddingLeft13 u-width60 u-height60 u-accentColor--textNormal u-accentColor--buttonNormal clap-onboardingcollection\" data-action=\"sign-up-prompt\" data-sign-in-action=\"multivote\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/vote/p/384ef05f32b2\" data-action-source=\"post_actions_footer-----384ef05f32b2---------------------clap_footer\" aria-label=\"Clap\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--clap svgIcon--33px u-relative u-topNegative2 u-xs-top0\"><svg class=\"svgIcon-use\" width=\"33\" height=\"33\" viewBox=\"0 0 33 33\"><path d=\"M28.86 17.342l-3.64-6.402c-.292-.433-.712-.729-1.163-.8a1.124 1.124 0 0 0-.889.213c-.63.488-.742 1.181-.33 2.061l1.222 2.587 1.4 2.46c2.234 4.085 1.511 8.007-2.145 11.663-.26.26-.526.49-.797.707 1.42-.084 2.881-.683 4.292-2.094 3.822-3.823 3.565-7.876 2.05-10.395zm-6.252 11.075c3.352-3.35 3.998-6.775 1.978-10.469l-3.378-5.945c-.292-.432-.712-.728-1.163-.8a1.122 1.122 0 0 0-.89.213c-.63.49-.742 1.182-.33 2.061l1.72 3.638a.502.502 0 0 1-.806.568l-8.91-8.91a1.335 1.335 0 0 0-1.887 1.886l5.292 5.292a.5.5 0 0 1-.707.707l-5.292-5.292-1.492-1.492c-.503-.503-1.382-.505-1.887 0a1.337 1.337 0 0 0 0 1.886l1.493 1.492 5.292 5.292a.499.499 0 0 1-.353.854.5.5 0 0 1-.354-.147L5.642 13.96a1.338 1.338 0 0 0-1.887 0 1.338 1.338 0 0 0 0 1.887l2.23 2.228 3.322 3.324a.499.499 0 0 1-.353.853.502.502 0 0 1-.354-.146l-3.323-3.324a1.333 1.333 0 0 0-1.886 0 1.325 1.325 0 0 0-.39.943c0 .356.138.691.39.943l6.396 6.397c3.528 3.53 8.86 5.313 12.821 1.353zM12.73 9.26l5.68 5.68-.49-1.037c-.518-1.107-.426-2.13.224-2.89l-3.303-3.304a1.337 1.337 0 0 0-1.886 0 1.326 1.326 0 0 0-.39.944c0 .217.067.42.165.607zm14.787 19.184c-1.599 1.6-3.417 2.392-5.353 2.392-.349 0-.7-.03-1.058-.082a7.922 7.922 0 0 1-3.667.887c-3.049 0-6.115-1.626-8.359-3.87l-6.396-6.397A2.315 2.315 0 0 1 2 19.724a2.327 2.327 0 0 1 1.923-2.296l-.875-.875a2.339 2.339 0 0 1 0-3.3 2.33 2.33 0 0 1 1.24-.647l-.139-.139c-.91-.91-.91-2.39 0-3.3.884-.884 2.421-.882 3.301 0l.138.14a2.335 2.335 0 0 1 3.948-1.24l.093.092c.091-.423.291-.828.62-1.157a2.336 2.336 0 0 1 3.3 0l3.384 3.386a2.167 2.167 0 0 1 1.271-.173c.534.086 1.03.354 1.441.765.11-.549.415-1.034.911-1.418a2.12 2.12 0 0 1 1.661-.41c.727.117 1.385.565 1.853 1.262l3.652 6.423c1.704 2.832 2.025 7.377-2.205 11.607zM13.217.484l-1.917.882 2.37 2.837-.454-3.719zm8.487.877l-1.928-.86-.44 3.697 2.368-2.837zM16.5 3.293L15.478-.005h2.044L16.5 3.293z\" fill-rule=\"evenodd\"></path></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--clapFilled svgIcon--33px u-relative u-topNegative2 u-xs-top0\"><svg class=\"svgIcon-use\" width=\"33\" height=\"33\" viewBox=\"0 0 33 33\"><g fill-rule=\"evenodd\"><path d=\"M29.58 17.1l-3.854-6.78c-.365-.543-.876-.899-1.431-.989a1.491 1.491 0 0 0-1.16.281c-.42.327-.65.736-.7 1.207v.001l3.623 6.367c2.46 4.498 1.67 8.802-2.333 12.807-.265.265-.536.505-.81.728 1.973-.222 3.474-1.286 4.45-2.263 4.166-4.165 3.875-8.6 2.215-11.36zm-4.831.82l-3.581-6.3c-.296-.439-.725-.742-1.183-.815a1.105 1.105 0 0 0-.89.213c-.647.502-.755 1.188-.33 2.098l1.825 3.858a.601.601 0 0 1-.197.747.596.596 0 0 1-.77-.067L10.178 8.21c-.508-.506-1.393-.506-1.901 0a1.335 1.335 0 0 0-.393.95c0 .36.139.698.393.95v.001l5.61 5.61a.599.599 0 1 1-.848.847l-5.606-5.606c-.001 0-.002 0-.003-.002L5.848 9.375a1.349 1.349 0 0 0-1.902 0 1.348 1.348 0 0 0 0 1.901l1.582 1.582 5.61 5.61a.6.6 0 0 1-.848.848l-5.61-5.61c-.51-.508-1.393-.508-1.9 0a1.332 1.332 0 0 0-.394.95c0 .36.139.697.393.952l2.363 2.362c.002.001.002.002.002.003l3.52 3.52a.6.6 0 0 1-.848.847l-3.522-3.523h-.001a1.336 1.336 0 0 0-.95-.393 1.345 1.345 0 0 0-.949 2.295l6.779 6.78c3.715 3.713 9.327 5.598 13.49 1.434 3.527-3.528 4.21-7.13 2.086-11.015zM11.817 7.727c.06-.328.213-.64.466-.893.64-.64 1.755-.64 2.396 0l3.232 3.232c-.82.783-1.09 1.833-.764 2.992l-5.33-5.33z\"></path><path d=\"M13.285.48l-1.916.881 2.37 2.837z\"></path><path d=\"M21.719 1.361L19.79.501l-.44 3.697z\"></path><path d=\"M16.502 3.298L15.481 0h2.043z\"></path></g></svg></span></span></button><div class=\"clapUndo u-width60 u-round u-height32 u-absolute u-borderBox u-paddingRight5 u-transition--transform200Spring u-background--brandSageLighter js-clapUndo\" style=\"top: 14px; padding: 2px;\"><button class=\"button button--chromeless u-baseColor--buttonNormal button--withIcon button--withSvgIcon u-floatRight\" data-action=\"multivote-undo\" data-action-value=\"384ef05f32b2\"><span class=\"svgIcon svgIcon--removeThin svgIcon--29px\"><svg class=\"svgIcon-use\" width=\"29\" height=\"29\" viewBox=\"0 0 29 29\"><path d=\"M20.13 8.11l-5.61 5.61-5.609-5.61-.801.801 5.61 5.61-5.61 5.61.801.8 5.61-5.609 5.61 5.61.8-.801-5.609-5.61 5.61-5.61\" fill-rule=\"evenodd\"></path></svg></span></button></div></div><span class=\"u-textAlignCenter u-relative u-background js-actionMultirecommendCount u-marginLeft10\"><button class=\"button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton\" data-action=\"show-recommends\" data-action-value=\"384ef05f32b2\">937</button></span></div></div><div class=\"buttonSet u-flex0\"><button class=\"button button--large button--dark button--chromeless is-touchIconBlackPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon\" data-action=\"scroll-to-responses\" data-action-source=\"post_actions_footer\"><span class=\"svgIcon svgIcon--response svgIcon--29px\"><svg class=\"svgIcon-use\" width=\"29\" height=\"29\" viewBox=\"0 0 29 29\"><path d=\"M21.27 20.058c1.89-1.826 2.754-4.17 2.754-6.674C24.024 8.21 19.67 4 14.1 4 8.53 4 4 8.21 4 13.384c0 5.175 4.53 9.385 10.1 9.385 1.007 0 2-.14 2.95-.41.285.25.592.49.918.7 1.306.87 2.716 1.31 4.19 1.31.276-.01.494-.14.6-.36a.625.625 0 0 0-.052-.65c-.61-.84-1.042-1.71-1.282-2.58a5.417 5.417 0 0 1-.154-.75zm-3.85 1.324l-.083-.28-.388.12a9.72 9.72 0 0 1-2.85.424c-4.96 0-8.99-3.706-8.99-8.262 0-4.556 4.03-8.263 8.99-8.263 4.95 0 8.77 3.71 8.77 8.27 0 2.25-.75 4.35-2.5 5.92l-.24.21v.32c0 .07 0 .19.02.37.03.29.1.6.19.92.19.7.49 1.4.89 2.08-.93-.14-1.83-.49-2.67-1.06-.34-.22-.88-.48-1.16-.74z\"></path></svg></span></button><button class=\"button button--chromeless u-baseColor--buttonNormal\" data-action=\"scroll-to-responses\">13</button><button class=\"button button--large button--dark button--chromeless is-touchIconBlackPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon u-xs-hide\" title=\"Share on Twitter\" aria-label=\"Share on Twitter\" data-action=\"share-on-twitter\" data-action-source=\"post_actions_footer\"><span class=\"svgIcon svgIcon--twitter svgIcon--29px\"><svg class=\"svgIcon-use\" width=\"29\" height=\"29\" viewBox=\"0 0 29 29\"><path d=\"M21.967 11.8c.018 5.93-4.607 11.18-11.177 11.18-2.172 0-4.25-.62-6.047-1.76l-.268.422-.038.5.186.013.168.012c.3.02.44.032.6.046 2.06-.026 3.95-.686 5.49-1.86l1.12-.85-1.4-.048c-1.57-.055-2.92-1.08-3.36-2.51l-.48.146-.05.5c.22.03.48.05.75.08.48-.02.87-.07 1.25-.15l2.33-.49-2.32-.49c-1.68-.35-2.91-1.83-2.91-3.55 0-.05 0-.01-.01.03l-.49-.1-.25.44c.63.36 1.35.57 2.07.58l1.7.04L7.4 13c-.978-.662-1.59-1.79-1.618-3.047a4.08 4.08 0 0 1 .524-1.8l-.825.07a12.188 12.188 0 0 0 8.81 4.515l.59.033-.06-.59v-.02c-.05-.43-.06-.63-.06-.87a3.617 3.617 0 0 1 6.27-2.45l.2.21.28-.06c1.01-.22 1.94-.59 2.73-1.09l-.75-.56c-.1.36-.04.89.12 1.36.23.68.58 1.13 1.17.85l-.21-.45-.42-.27c-.52.8-1.17 1.48-1.92 2L22 11l.016.28c.013.2.014.35 0 .52v.04zm.998.038c.018-.22.017-.417 0-.66l-.498.034.284.41a8.183 8.183 0 0 0 2.2-2.267l.97-1.48-1.6.755c.17-.08.3-.02.34.03a.914.914 0 0 1-.13-.292c-.1-.297-.13-.64-.1-.766l.36-1.254-1.1.695c-.69.438-1.51.764-2.41.963l.48.15a4.574 4.574 0 0 0-3.38-1.484 4.616 4.616 0 0 0-4.61 4.613c0 .29.02.51.08.984l.01.02.5-.06.03-.5c-3.17-.18-6.1-1.7-8.08-4.15l-.48-.56-.36.64c-.39.69-.62 1.48-.65 2.28.04 1.61.81 3.04 2.06 3.88l.3-.92c-.55-.02-1.11-.17-1.6-.45l-.59-.34-.14.67c-.02.08-.02.16 0 .24-.01 2.12 1.55 4.01 3.69 4.46l.1-.49-.1-.49c-.33.07-.67.12-1.03.14-.18-.02-.43-.05-.64-.07l-.76-.09.23.73c.57 1.84 2.29 3.14 4.28 3.21l-.28-.89a8.252 8.252 0 0 1-4.85 1.66c-.12-.01-.26-.02-.56-.05l-.17-.01-.18-.01L2.53 21l1.694 1.07a12.233 12.233 0 0 0 6.58 1.917c7.156 0 12.2-5.73 12.18-12.18l-.002.04z\"></path></svg></span></button><button class=\"button button--large button--dark button--chromeless is-touchIconBlackPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon u-xs-hide\" title=\"Share on Facebook\" aria-label=\"Share on Facebook\" data-action=\"share-on-facebook\" data-action-source=\"post_actions_footer\"><span class=\"svgIcon svgIcon--facebook svgIcon--29px\"><svg class=\"svgIcon-use\" width=\"29\" height=\"29\" viewBox=\"0 0 29 29\"><path d=\"M16.39 23.61v-5.808h1.846a.55.55 0 0 0 .546-.48l.36-2.797a.551.551 0 0 0-.547-.62H16.39V12.67c0-.67.12-.813.828-.813h1.474a.55.55 0 0 0 .55-.55V8.803a.55.55 0 0 0-.477-.545c-.436-.06-1.36-.116-2.22-.116-2.5 0-4.13 1.62-4.13 4.248v1.513H10.56a.551.551 0 0 0-.55.55v2.797c0 .304.248.55.55.55h1.855v5.76c-4.172-.96-7.215-4.7-7.215-9.1 0-5.17 4.17-9.36 9.31-9.36 5.14 0 9.31 4.19 9.31 9.36 0 4.48-3.155 8.27-7.43 9.15M14.51 4C8.76 4 4.1 8.684 4.1 14.46c0 5.162 3.75 9.523 8.778 10.32a.55.55 0 0 0 .637-.543v-6.985a.551.551 0 0 0-.55-.55H11.11v-1.697h1.855a.55.55 0 0 0 .55-.55v-2.063c0-2.02 1.136-3.148 3.03-3.148.567 0 1.156.027 1.597.06v1.453h-.924c-1.363 0-1.93.675-1.93 1.912v1.78c0 .3.247.55.55.55h2.132l-.218 1.69H15.84c-.305 0-.55.24-.55.55v7.02c0 .33.293.59.623.54 5.135-.7 9.007-5.11 9.007-10.36C24.92 8.68 20.26 4 14.51 4\"></path></svg></span></button><button class=\"button button--large button--dark button--chromeless u-baseColor--buttonDark button--withIcon button--withSvgIcon u-xs-show\" title=\"Share this story on Twitter or Facebook\" aria-label=\"Share this story on Twitter or Facebook\" data-action=\"show-share-popover\" data-action-source=\"post_actions_footer\"><span class=\"svgIcon svgIcon--share svgIcon--29px\"><svg class=\"svgIcon-use\" width=\"29\" height=\"29\" viewBox=\"0 0 29 29\"><path d=\"M20.385 8H19a.5.5 0 1 0 .011 1h1.39c.43 0 .84.168 1.14.473.31.305.48.71.48 1.142v10.77c0 .43-.17.837-.47 1.142-.3.305-.71.473-1.14.473H8.62c-.43 0-.84-.168-1.144-.473a1.603 1.603 0 0 1-.473-1.142v-10.77c0-.43.17-.837.48-1.142A1.599 1.599 0 0 1 8.62 9H10a.502.502 0 0 0 0-1H8.615c-.67 0-1.338.255-1.85.766-.51.51-.765 1.18-.765 1.85v10.77c0 .668.255 1.337.766 1.848.51.51 1.18.766 1.85.766h11.77c.668 0 1.337-.255 1.848-.766.51-.51.766-1.18.766-1.85v-10.77c0-.668-.255-1.337-.766-1.848A2.61 2.61 0 0 0 20.384 8zm-8.67-2.508L14 3.207v8.362c0 .27.224.5.5.5s.5-.23.5-.5V3.2l2.285 2.285a.49.49 0 0 0 .704-.001.511.511 0 0 0 0-.708l-3.14-3.14a.504.504 0 0 0-.71 0L11 4.776a.501.501 0 0 0 .71.706\" fill-rule=\"evenodd\"></path></svg></span></button></div></div></div></div><div class=\"u-maxWidth740 u-paddingTop20 u-marginTop20 u-borderTopLightest container u-paddingBottom20 u-xs-paddingBottom10 js-postAttributionFooterContainer\"><div class=\"row js-postFooterInfo\"><div class=\"col u-size6of12 u-xs-size12of12\"><li class=\"uiScale uiScale-ui--small uiScale-caption--regular u-block u-paddingBottom18 js-cardUser\"><div class=\"u-marginLeft20 u-floatRight\"><span class=\"followState js-followState\" data-user-id=\"f9927938f0d0\"><button class=\"button button--small u-noUserSelect button--withChrome u-baseColor--buttonNormal button--withHover button--unblock js-unblockButton\" data-action=\"sign-up-prompt\" data-sign-in-action=\"toggle-block-user\" data-requires-token=\"true\" data-redirect=\"https://journal.artfuldev.com/unit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2\" data-action-source=\"footer_card\"><span class=\"button-label  button-defaultState\">Blocked</span><span class=\"button-label button-hoverState\">Unblock</span></button><button class=\"button button--primary button--small u-noUserSelect button--withChrome u-accentColor--buttonNormal button--follow js-followButton\" data-action=\"sign-up-prompt\" data-sign-in-action=\"toggle-subscribe-user\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/subscribe/user/f9927938f0d0\" data-action-source=\"footer_card-f9927938f0d0-------------------------follow_footer\"><span class=\"button-label  button-defaultState js-buttonLabel\">Follow</span><span class=\"button-label button-activeState\">Following</span></button></span></div><div class=\"u-tableCell\"><a class=\"link u-baseColor--link avatar\" href=\"https://journal.artfuldev.com/@artfuldev?source=footer_card\" title=\"Go to the profile of Sudarsan Balaji\" aria-label=\"Go to the profile of Sudarsan Balaji\" data-action-source=\"footer_card\" data-user-id=\"f9927938f0d0\" data-collection-slug=\"the-journal-of-artful-development\" dir=\"auto\"><img src=\"https://cdn-images-1.medium.com/fit/c/60/60/0*PnnfhI54q5g94WEk.jpg\" class=\"avatar-image avatar-image--small\" alt=\"Go to the profile of Sudarsan Balaji\"></a></div><div class=\"u-tableCell u-verticalAlignMiddle u-breakWord u-paddingLeft15\"><h3 class=\"ui-h3 u-fontSize18 u-lineHeightTighter u-marginBottom4\"><a class=\"link link--primary u-accentColor--hoverTextNormal\" href=\"https://journal.artfuldev.com/@artfuldev\" property=\"cc:attributionName\" title=\"Go to the profile of Sudarsan Balaji\" aria-label=\"Go to the profile of Sudarsan Balaji\" rel=\"author cc:attributionUrl\" data-user-id=\"f9927938f0d0\" data-collection-slug=\"the-journal-of-artful-development\" dir=\"auto\">Sudarsan Balaji</a></h3><p class=\"ui-body u-fontSize14 u-lineHeightBaseSans u-textColorDark u-marginBottom4\">Software, Technology, Gadgets, Art, Mathematics, Development, Design, Learning, Problem-solving. Obsessed with quality.</p></div></li></div><div class=\"col u-size6of12 u-xs-size12of12 u-xs-marginTop30\"><li class=\"uiScale uiScale-ui--small uiScale-caption--regular u-block u-paddingBottom18 js-cardCollection\"><div class=\"u-marginLeft20 u-floatRight\"><button class=\"button button--primary button--small u-noUserSelect button--withChrome u-accentColor--buttonNormal js-relationshipButton\" data-action=\"sign-up-prompt\" data-sign-in-action=\"toggle-follow-collection\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/subscribe/collection/the-journal-of-artful-development\" data-action-source=\"----81a1a981c869----------------------follow_footer\" data-collection-id=\"81a1a981c869\"><span class=\"button-label  js-buttonLabel\">Follow</span></button></div><div class=\"u-tableCell \"><a class=\"link u-baseColor--link avatar avatar--roundedRectangle\" href=\"https://journal.artfuldev.com?source=footer_card\" title=\"Go to The Journal of Artful Development\" aria-label=\"Go to The Journal of Artful Development\" data-action-source=\"footer_card\" data-collection-slug=\"the-journal-of-artful-development\"><img src=\"https://cdn-images-1.medium.com/fit/c/60/60/1*Gr7TGxz3e_rJH4GQD5q12g.png\" class=\"avatar-image u-size60x60\" alt=\"The Journal of Artful Development\"></a></div><div class=\"u-tableCell u-verticalAlignMiddle u-breakWord u-paddingLeft15\"><h3 class=\"ui-h3 u-fontSize18 u-lineHeightTighter u-marginBottom4\"><a class=\"link link--primary u-accentColor--hoverTextNormal\" href=\"https://journal.artfuldev.com?source=footer_card\" rel=\"collection\" data-action-source=\"footer_card\" data-collection-slug=\"the-journal-of-artful-development\">The Journal of Artful Development</a></h3><p class=\"ui-body u-fontSize14 u-lineHeightBaseSans u-textColorDark u-marginBottom4\">I believe that software development, and coding,  is an art. And that developing your artful side is a necessary journey. Making notes as you go along is what makes it a journal.</p><div class=\"buttonSet\"></div></div></li></div></div></div><div class=\"js-postFooterPlacements\"><div class=\"streamItem streamItem--placementCardGrid js-streamItem\"><div class=\"u-clearfix u-backgroundGrayLightest\"><div class=\"row u-marginAuto u-maxWidth1000 u-paddingTop30 u-paddingBottom40\"><div class=\"col u-padding8 u-xs-size12of12 u-size4of12\"><div class=\"uiScale uiScale-ui--small uiScale-caption--regular u-height280 u-sizeFullWidth u-backgroundWhite u-borderCardBorder u-boxShadow u-borderBox u-borderRadius4 js-trackedPost\" data-post-id=\"3d63213c8370\" data-source=\"placement_card_footer_grid---------0-43\" data-tracking-context=\"placement\"><a class=\"link link--noUnderline u-baseColor--link\" href=\"https://hackernoon.com/how-to-lose-an-it-job-in-10-minutes-3d63213c8370?source=placement_card_footer_grid---------0-43\" data-action-source=\"placement_card_footer_grid---------0-43\"><div class=\"u-backgroundCover u-backgroundColorGrayLight u-height100 u-sizeFullWidth u-borderBottomLight u-borderRadiusTop4\" style=\"background-image: url(&quot;https://cdn-images-1.medium.com/fit/c/400/120/1*5Uzr-KTpKGqvgWWtT2q2MA.jpeg&quot;); background-position: 50% 50% !important;\"></div></a><div class=\"u-padding15 u-borderBox u-flexColumn u-height180\"><a class=\"link link--noUnderline u-baseColor--link u-flex1\" href=\"https://hackernoon.com/how-to-lose-an-it-job-in-10-minutes-3d63213c8370?source=placement_card_footer_grid---------0-43\" data-action-source=\"placement_card_footer_grid---------0-43\"><div class=\"uiScale uiScale-ui--regular uiScale-caption--small u-textColorNormal u-marginBottom7\">Also tagged JavaScript</div><div class=\"ui-h3 ui-clamp2 u-textColorDarkest u-contentSansBold u-fontSize24 u-maxHeight2LineHeightTighter u-lineClamp2 u-textOverflowEllipsis u-letterSpacingTight u-paddingBottom2\">How to Lose an IT Job in 10 Minutes</div></a><div class=\"u-paddingBottom10 u-flex0 u-flexCenter\"><div class=\"u-flex1 u-minWidth0 u-marginRight10\"><div class=\"u-flexCenter\"><div class=\"postMetaInline-avatar u-flex0\"><a class=\"link u-baseColor--link avatar\" href=\"https://hackernoon.com/@albinotonnina\" data-action=\"show-user-card\" data-action-value=\"7d787296773d\" data-action-type=\"hover\" data-user-id=\"7d787296773d\" data-collection-slug=\"hacker-daily\" dir=\"auto\"><img src=\"https://cdn-images-1.medium.com/fit/c/36/36/1*74rREfYSb4a8eYMs0FW_lw.png\" class=\"avatar-image u-size36x36 u-xs-size32x32\" alt=\"Go to the profile of Albino Tonnina\"></a></div><div class=\"postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis\"><a class=\"ds-link ds-link--styleSubtle link link--darken link--darker\" href=\"https://hackernoon.com/@albinotonnina?source=placement_card_footer_grid---------0-43\" data-action=\"show-user-card\" data-action-source=\"placement_card_footer_grid---------0-43\" data-action-value=\"7d787296773d\" data-action-type=\"hover\" data-user-id=\"7d787296773d\" data-collection-slug=\"hacker-daily\" dir=\"auto\">Albino Tonnina</a><div class=\"ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental\"><span class=\"readingTime u-textColorNormal\" title=\"9 min read\"></span></div></div></div></div><div class=\"u-flex0 u-flexCenter\"><div class=\"buttonSet\"><div class=\"multirecommend js-actionMultirecommend u-flexCenter\" data-post-id=\"3d63213c8370\" data-is-label-padded=\"true\" data-source=\"placement_card_footer_grid-----3d63213c8370----0-43----------------clap_preview\"><div class=\"u-relative u-foreground\"><button class=\"button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton\" data-action=\"sign-up-prompt\" data-sign-in-action=\"multivote\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/vote/p/3d63213c8370\" data-action-source=\"placement_card_footer_grid-----3d63213c8370----0-43----------------clap_preview\" aria-label=\"Clap\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--clap svgIcon--25px\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.739 0l.761 2.966L13.261 0z\"></path><path d=\"M14.815 3.776l1.84-2.551-1.43-.471z\"></path><path d=\"M8.378 1.224l1.84 2.551L9.81.753z\"></path><path d=\"M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 0 1 .66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 0 1 .707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 0 0 .624-.624L4.11 14.04l-1.75-1.75a.998.998 0 1 1 1.41-1.413l4.154 4.156a.44.44 0 0 0 .624 0 .44.44 0 0 0 0-.624l-4.152-4.153-1.172-1.171a.998.998 0 0 1 0-1.41 1.018 1.018 0 0 1 1.41 0l1.172 1.17 4.153 4.152a.437.437 0 0 0 .624 0 .442.442 0 0 0 0-.624L6.43 8.222a.988.988 0 0 1-.291-.705.99.99 0 0 1 .29-.706 1 1 0 0 1 1.412 0l6.992 6.993a.443.443 0 0 0 .71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 0 1 .66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 0 1-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 0 1 1.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 0 0-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 0 0-1.095-.562 1.776 1.776 0 0 0-.992.128l-2.636-2.636a1.883 1.883 0 0 0-2.658 0 1.862 1.862 0 0 0-.478.847 1.886 1.886 0 0 0-2.671-.012 1.867 1.867 0 0 0-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 0 0 0 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 0 0 0 2.659l.624.622a1.879 1.879 0 0 0-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 0 0 1.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z\"></path></g></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--clapFilled svgIcon--25px\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.738 0l.762 2.966L13.262 0z\"></path><path d=\"M16.634 1.224l-1.432-.47-.408 3.022z\"></path><path d=\"M9.79.754l-1.431.47 1.84 2.552z\"></path><path d=\"M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 0 0-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 0 1-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914\"></path><path d=\"M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z\"></path><path d=\"M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 0 0-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 1 1-.868.612L7.2 6.378a.986.986 0 1 0-1.395 1.395l4.401 4.403a.538.538 0 1 1-.762.762L5.046 8.54 3.802 7.295a.99.99 0 0 0-1.396 0 .981.981 0 0 0 0 1.394L3.647 9.93l4.402 4.403a.537.537 0 0 1 0 .761.535.535 0 0 1-.762 0L2.89 10.696a.992.992 0 0 0-1.399-.003.983.983 0 0 0 0 1.395l1.855 1.854 2.763 2.765a.538.538 0 0 1-.76.761l-2.765-2.764a.982.982 0 0 0-1.395 0 .989.989 0 0 0 0 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z\"></path></g></svg></span></span></button></div><span class=\"u-textAlignCenter u-relative u-background js-actionMultirecommendCount u-marginLeft5\"><button class=\"button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents u-marginLeft4\" data-action=\"show-recommends\" data-action-value=\"3d63213c8370\">9K</button></span></div></div><div class=\"u-height20 u-borderRightLighter u-inlineBlock u-relative u-marginRight10 u-marginLeft12\"></div><div class=\"buttonSet\"><button class=\"button button--chromeless is-touchIconFadeInPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton\" title=\"Bookmark this story to read later\" aria-label=\"Bookmark this story to read later\" data-action=\"sign-up-prompt\" data-sign-in-action=\"add-to-bookmarks\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/bookmark/p/3d63213c8370\" data-action-source=\"placement_card_footer_grid-----3d63213c8370----0-43----------------bookmark_preview\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--bookmark svgIcon--25px\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126a.508.508 0 0 0 .708-.03.5.5 0 0 0 .118-.285H19V6zm-6.838 9.97L7 19.636V6c0-.55.45-1 1-1h9c.55 0 1 .45 1 1v13.637l-5.162-3.668a.49.49 0 0 0-.676 0z\" fill-rule=\"evenodd\"></path></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--bookmarkFilled svgIcon--25px\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 0 0 .118-.285H19V6z\"></path></svg></span></span></button></div></div></div></div></div></div><div class=\"col u-padding8 u-xs-size12of12 u-size4of12\"><div class=\"uiScale uiScale-ui--small uiScale-caption--regular u-height280 u-sizeFullWidth u-backgroundWhite u-borderCardBorder u-boxShadow u-borderBox u-borderRadius4 js-trackedPost\" data-post-id=\"20c47cf51571\" data-source=\"placement_card_footer_grid---------1-60\" data-tracking-context=\"placement\"><a class=\"link link--noUnderline u-baseColor--link\" href=\"https://blog.angularindepth.com/rxjs-how-to-observe-an-object-20c47cf51571?source=placement_card_footer_grid---------1-60\" data-action-source=\"placement_card_footer_grid---------1-60\"><div class=\"u-backgroundCover u-backgroundColorGrayLight u-height100 u-sizeFullWidth u-borderBottomLight u-borderRadiusTop4\" style=\"background-image: url(&quot;https://cdn-images-1.medium.com/fit/c/400/120/1*HvN0BKF6Orp0CKaNDz2KAg.jpeg&quot;); background-position: 50% 50% !important;\"></div></a><div class=\"u-padding15 u-borderBox u-flexColumn u-height180\"><a class=\"link link--noUnderline u-baseColor--link u-flex1\" href=\"https://blog.angularindepth.com/rxjs-how-to-observe-an-object-20c47cf51571?source=placement_card_footer_grid---------1-60\" data-action-source=\"placement_card_footer_grid---------1-60\"><div class=\"uiScale uiScale-ui--regular uiScale-caption--small u-textColorNormal u-marginBottom7\">Related reads</div><div class=\"ui-h3 ui-clamp2 u-textColorDarkest u-contentSansBold u-fontSize24 u-maxHeight2LineHeightTighter u-lineClamp2 u-textOverflowEllipsis u-letterSpacingTight u-paddingBottom2\">RxJS: How to Observe an Object</div></a><div class=\"u-paddingBottom10 u-flex0 u-flexCenter\"><div class=\"u-flex1 u-minWidth0 u-marginRight10\"><div class=\"u-flexCenter\"><div class=\"postMetaInline-avatar u-flex0\"><a class=\"link u-baseColor--link avatar\" href=\"https://blog.angularindepth.com/@cartant\" data-action=\"show-user-card\" data-action-value=\"d05557088657\" data-action-type=\"hover\" data-user-id=\"d05557088657\" data-collection-slug=\"angular-in-depth\" dir=\"auto\"><img src=\"https://cdn-images-1.medium.com/fit/c/36/36/1*umjPUgx8sJWTlavVeh8E6A.png\" class=\"avatar-image u-size36x36 u-xs-size32x32\" alt=\"Go to the profile of Nicholas Jamieson\"></a></div><div class=\"postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis\"><a class=\"ds-link ds-link--styleSubtle link link--darken link--darker\" href=\"https://blog.angularindepth.com/@cartant?source=placement_card_footer_grid---------1-60\" data-action=\"show-user-card\" data-action-source=\"placement_card_footer_grid---------1-60\" data-action-value=\"d05557088657\" data-action-type=\"hover\" data-user-id=\"d05557088657\" data-collection-slug=\"angular-in-depth\" dir=\"auto\">Nicholas Jamieson</a><div class=\"ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental\"><span class=\"readingTime u-textColorNormal\" title=\"2 min read\"></span></div></div></div></div><div class=\"u-flex0 u-flexCenter\"><div class=\"buttonSet\"><div class=\"multirecommend js-actionMultirecommend u-flexCenter\" data-post-id=\"20c47cf51571\" data-is-label-padded=\"true\" data-source=\"placement_card_footer_grid-----20c47cf51571----1-60----------------clap_preview\"><div class=\"u-relative u-foreground\"><button class=\"button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton\" data-action=\"sign-up-prompt\" data-sign-in-action=\"multivote\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/vote/p/20c47cf51571\" data-action-source=\"placement_card_footer_grid-----20c47cf51571----1-60----------------clap_preview\" aria-label=\"Clap\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--clap svgIcon--25px\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.739 0l.761 2.966L13.261 0z\"></path><path d=\"M14.815 3.776l1.84-2.551-1.43-.471z\"></path><path d=\"M8.378 1.224l1.84 2.551L9.81.753z\"></path><path d=\"M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 0 1 .66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 0 1 .707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 0 0 .624-.624L4.11 14.04l-1.75-1.75a.998.998 0 1 1 1.41-1.413l4.154 4.156a.44.44 0 0 0 .624 0 .44.44 0 0 0 0-.624l-4.152-4.153-1.172-1.171a.998.998 0 0 1 0-1.41 1.018 1.018 0 0 1 1.41 0l1.172 1.17 4.153 4.152a.437.437 0 0 0 .624 0 .442.442 0 0 0 0-.624L6.43 8.222a.988.988 0 0 1-.291-.705.99.99 0 0 1 .29-.706 1 1 0 0 1 1.412 0l6.992 6.993a.443.443 0 0 0 .71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 0 1 .66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 0 1-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 0 1 1.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 0 0-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 0 0-1.095-.562 1.776 1.776 0 0 0-.992.128l-2.636-2.636a1.883 1.883 0 0 0-2.658 0 1.862 1.862 0 0 0-.478.847 1.886 1.886 0 0 0-2.671-.012 1.867 1.867 0 0 0-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 0 0 0 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 0 0 0 2.659l.624.622a1.879 1.879 0 0 0-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 0 0 1.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z\"></path></g></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--clapFilled svgIcon--25px\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.738 0l.762 2.966L13.262 0z\"></path><path d=\"M16.634 1.224l-1.432-.47-.408 3.022z\"></path><path d=\"M9.79.754l-1.431.47 1.84 2.552z\"></path><path d=\"M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 0 0-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 0 1-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914\"></path><path d=\"M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z\"></path><path d=\"M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 0 0-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 1 1-.868.612L7.2 6.378a.986.986 0 1 0-1.395 1.395l4.401 4.403a.538.538 0 1 1-.762.762L5.046 8.54 3.802 7.295a.99.99 0 0 0-1.396 0 .981.981 0 0 0 0 1.394L3.647 9.93l4.402 4.403a.537.537 0 0 1 0 .761.535.535 0 0 1-.762 0L2.89 10.696a.992.992 0 0 0-1.399-.003.983.983 0 0 0 0 1.395l1.855 1.854 2.763 2.765a.538.538 0 0 1-.76.761l-2.765-2.764a.982.982 0 0 0-1.395 0 .989.989 0 0 0 0 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z\"></path></g></svg></span></span></button></div><span class=\"u-textAlignCenter u-relative u-background js-actionMultirecommendCount u-marginLeft5\"><button class=\"button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents u-marginLeft4\" data-action=\"show-recommends\" data-action-value=\"20c47cf51571\">657</button></span></div></div><div class=\"u-height20 u-borderRightLighter u-inlineBlock u-relative u-marginRight10 u-marginLeft12\"></div><div class=\"buttonSet\"><button class=\"button button--chromeless is-touchIconFadeInPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton\" title=\"Bookmark this story to read later\" aria-label=\"Bookmark this story to read later\" data-action=\"sign-up-prompt\" data-sign-in-action=\"add-to-bookmarks\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/bookmark/p/20c47cf51571\" data-action-source=\"placement_card_footer_grid-----20c47cf51571----1-60----------------bookmark_preview\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--bookmark svgIcon--25px\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126a.508.508 0 0 0 .708-.03.5.5 0 0 0 .118-.285H19V6zm-6.838 9.97L7 19.636V6c0-.55.45-1 1-1h9c.55 0 1 .45 1 1v13.637l-5.162-3.668a.49.49 0 0 0-.676 0z\" fill-rule=\"evenodd\"></path></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--bookmarkFilled svgIcon--25px\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 0 0 .118-.285H19V6z\"></path></svg></span></span></button></div></div></div></div></div></div><div class=\"col u-padding8 u-xs-size12of12 u-size4of12\"><div class=\"uiScale uiScale-ui--small uiScale-caption--regular u-height280 u-sizeFullWidth u-backgroundWhite u-borderCardBorder u-boxShadow u-borderBox u-borderRadius4 js-trackedPost\" data-post-id=\"2a031a0dc9cf\" data-source=\"placement_card_footer_grid---------2-43\" data-tracking-context=\"placement\"><a class=\"link link--noUnderline u-baseColor--link\" href=\"https://medium.freecodecamp.org/learn-these-javascript-fundamentals-and-become-a-better-developer-2a031a0dc9cf?source=placement_card_footer_grid---------2-43\" data-action-source=\"placement_card_footer_grid---------2-43\"><div class=\"u-backgroundCover u-backgroundColorGrayLight u-height100 u-sizeFullWidth u-borderBottomLight u-borderRadiusTop4\" style=\"background-image: url(&quot;https://cdn-images-1.medium.com/fit/c/400/120/1*2K1k1leVNAnXnscL1KBjEQ.jpeg&quot;); background-position: 50% 50% !important;\"></div></a><div class=\"u-padding15 u-borderBox u-flexColumn u-height180\"><a class=\"link link--noUnderline u-baseColor--link u-flex1\" href=\"https://medium.freecodecamp.org/learn-these-javascript-fundamentals-and-become-a-better-developer-2a031a0dc9cf?source=placement_card_footer_grid---------2-43\" data-action-source=\"placement_card_footer_grid---------2-43\"><div class=\"uiScale uiScale-ui--regular uiScale-caption--small u-textColorNormal u-marginBottom7\">Also tagged JavaScript</div><div class=\"ui-h3 ui-clamp2 u-textColorDarkest u-contentSansBold u-fontSize24 u-maxHeight2LineHeightTighter u-lineClamp2 u-textOverflowEllipsis u-letterSpacingTight u-paddingBottom2\">Learn these JavaScript fundamentals and become a better developer</div></a><div class=\"u-paddingBottom10 u-flex0 u-flexCenter\"><div class=\"u-flex1 u-minWidth0 u-marginRight10\"><div class=\"u-flexCenter\"><div class=\"postMetaInline-avatar u-flex0\"><a class=\"link u-baseColor--link avatar\" href=\"https://medium.freecodecamp.org/@cristisalcescu\" data-action=\"show-user-card\" data-action-value=\"33d9ca60d9c0\" data-action-type=\"hover\" data-user-id=\"33d9ca60d9c0\" data-collection-slug=\"free-code-camp\" dir=\"auto\"><div class=\"u-relative u-inlineBlock u-flex0\"><img src=\"https://cdn-images-1.medium.com/fit/c/36/36/1*gAOA0dQY0gxYoH_1F_6VCw.png\" class=\"avatar-image u-size36x36 u-xs-size32x32\" alt=\"Go to the profile of Cristi Salcescu\"><div class=\"avatar-halo u-absolute u-textColorGreenNormal svgIcon\" style=\"width: calc(100% + 10px); height: calc(100% + 10px); top:-5px; left:-5px\"><svg viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.44615311,11.6601601 C6.57294867,5.47967718 12.9131553,1.5 19.9642857,1.5 C27.0154162,1.5 33.3556228,5.47967718 36.4824183,11.6601601 L37.3747245,11.2087295 C34.0793076,4.69494641 27.3961457,0.5 19.9642857,0.5 C12.5324257,0.5 5.84926381,4.69494641 2.55384689,11.2087295 L3.44615311,11.6601601 Z\"></path><path d=\"M36.4824183,28.2564276 C33.3556228,34.4369105 27.0154162,38.4165876 19.9642857,38.4165876 C12.9131553,38.4165876 6.57294867,34.4369105 3.44615311,28.2564276 L2.55384689,28.7078582 C5.84926381,35.2216412 12.5324257,39.4165876 19.9642857,39.4165876 C27.3961457,39.4165876 34.0793076,35.2216412 37.3747245,28.7078582 L36.4824183,28.2564276 Z\"></path></svg></div></div></a></div><div class=\"postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis\"><a class=\"ds-link ds-link--styleSubtle link link--darken link--darker\" href=\"https://medium.freecodecamp.org/@cristisalcescu?source=placement_card_footer_grid---------2-43\" data-action=\"show-user-card\" data-action-source=\"placement_card_footer_grid---------2-43\" data-action-value=\"33d9ca60d9c0\" data-action-type=\"hover\" data-user-id=\"33d9ca60d9c0\" data-collection-slug=\"free-code-camp\" dir=\"auto\">Cristi Salcescu</a><div class=\"ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental\"><span class=\"readingTime u-textColorNormal\" title=\"7 min read\"></span></div></div></div></div><div class=\"u-flex0 u-flexCenter\"><div class=\"buttonSet\"><div class=\"multirecommend js-actionMultirecommend u-flexCenter\" data-post-id=\"2a031a0dc9cf\" data-is-label-padded=\"true\" data-source=\"placement_card_footer_grid-----2a031a0dc9cf----2-43----------------clap_preview\"><div class=\"u-relative u-foreground\"><button class=\"button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton\" data-action=\"sign-up-prompt\" data-sign-in-action=\"multivote\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/vote/p/2a031a0dc9cf\" data-action-source=\"placement_card_footer_grid-----2a031a0dc9cf----2-43----------------clap_preview\" aria-label=\"Clap\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--clap svgIcon--25px\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.739 0l.761 2.966L13.261 0z\"></path><path d=\"M14.815 3.776l1.84-2.551-1.43-.471z\"></path><path d=\"M8.378 1.224l1.84 2.551L9.81.753z\"></path><path d=\"M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 0 1 .66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 0 1 .707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 0 0 .624-.624L4.11 14.04l-1.75-1.75a.998.998 0 1 1 1.41-1.413l4.154 4.156a.44.44 0 0 0 .624 0 .44.44 0 0 0 0-.624l-4.152-4.153-1.172-1.171a.998.998 0 0 1 0-1.41 1.018 1.018 0 0 1 1.41 0l1.172 1.17 4.153 4.152a.437.437 0 0 0 .624 0 .442.442 0 0 0 0-.624L6.43 8.222a.988.988 0 0 1-.291-.705.99.99 0 0 1 .29-.706 1 1 0 0 1 1.412 0l6.992 6.993a.443.443 0 0 0 .71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 0 1 .66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 0 1-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 0 1 1.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 0 0-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 0 0-1.095-.562 1.776 1.776 0 0 0-.992.128l-2.636-2.636a1.883 1.883 0 0 0-2.658 0 1.862 1.862 0 0 0-.478.847 1.886 1.886 0 0 0-2.671-.012 1.867 1.867 0 0 0-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 0 0 0 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 0 0 0 2.659l.624.622a1.879 1.879 0 0 0-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 0 0 1.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z\"></path></g></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--clapFilled svgIcon--25px\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.738 0l.762 2.966L13.262 0z\"></path><path d=\"M16.634 1.224l-1.432-.47-.408 3.022z\"></path><path d=\"M9.79.754l-1.431.47 1.84 2.552z\"></path><path d=\"M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 0 0-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 0 1-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914\"></path><path d=\"M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z\"></path><path d=\"M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 0 0-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 1 1-.868.612L7.2 6.378a.986.986 0 1 0-1.395 1.395l4.401 4.403a.538.538 0 1 1-.762.762L5.046 8.54 3.802 7.295a.99.99 0 0 0-1.396 0 .981.981 0 0 0 0 1.394L3.647 9.93l4.402 4.403a.537.537 0 0 1 0 .761.535.535 0 0 1-.762 0L2.89 10.696a.992.992 0 0 0-1.399-.003.983.983 0 0 0 0 1.395l1.855 1.854 2.763 2.765a.538.538 0 0 1-.76.761l-2.765-2.764a.982.982 0 0 0-1.395 0 .989.989 0 0 0 0 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z\"></path></g></svg></span></span></button></div><span class=\"u-textAlignCenter u-relative u-background js-actionMultirecommendCount u-marginLeft5\"><button class=\"button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents u-marginLeft4\" data-action=\"show-recommends\" data-action-value=\"2a031a0dc9cf\">3.8K</button></span></div></div><div class=\"u-height20 u-borderRightLighter u-inlineBlock u-relative u-marginRight10 u-marginLeft12\"></div><div class=\"buttonSet\"><button class=\"button button--chromeless is-touchIconFadeInPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton\" title=\"Bookmark this story to read later\" aria-label=\"Bookmark this story to read later\" data-action=\"sign-up-prompt\" data-sign-in-action=\"add-to-bookmarks\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/bookmark/p/2a031a0dc9cf\" data-action-source=\"placement_card_footer_grid-----2a031a0dc9cf----2-43----------------bookmark_preview\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--bookmark svgIcon--25px\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126a.508.508 0 0 0 .708-.03.5.5 0 0 0 .118-.285H19V6zm-6.838 9.97L7 19.636V6c0-.55.45-1 1-1h9c.55 0 1 .45 1 1v13.637l-5.162-3.668a.49.49 0 0 0-.676 0z\" fill-rule=\"evenodd\"></path></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--bookmarkFilled svgIcon--25px\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 0 0 .118-.285H19V6z\"></path></svg></span></span></button></div></div></div></div></div></div></div></div></div></div><div class=\"u-padding0 u-clearfix u-backgroundGrayLightest u-print-hide supplementalPostContent js-responsesWrapper\" data-action-scope=\"_actionscope_4\"><div class=\"container u-maxWidth740\"><div class=\"responsesStreamWrapper u-maxWidth640 js-responsesStreamWrapper\"><div class=\"container responsesStream-title u-paddingTop15\"><div class=\"row\"><header class=\"heading\"><div class=\"u-clearfix\"><div class=\"heading-content u-floatLeft\"><span class=\"heading-title heading-title--semibold\">Responses</span></div></div></header></div></div><div class=\"responsesStream js-responsesStream\"><div class=\"streamItem streamItem--postPreview js-streamItem\" data-action-scope=\"_actionscope_5\"><div class=\"cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20\"><div class=\"postArticle postArticle--short js-postArticle js-trackedPost\" data-post-id=\"4c1590d87d72\" data-source=\"responses---------0-31--------------------\" data-action-scope=\"_actionscope_6\" data-scroll=\"native\"><div class=\"u-marginBottom10\"><div class=\"postMetaInline\">Applause from <a class=\"link link--darken u-accentColor--textDarken u-baseColor--link\" href=\"https://medium.com/@artfuldev\" data-action=\"show-user-card\" data-action-value=\"f9927938f0d0\" data-action-type=\"hover\" data-user-id=\"f9927938f0d0\" dir=\"auto\">Sudarsan Balaji</a> (author)</div></div><div class=\"u-clearfix u-marginBottom15 u-paddingTop5\"><div class=\"postMetaInline u-floatLeft\"><div class=\"u-flexCenter\"><div class=\"postMetaInline-avatar u-flex0\"><a class=\"link u-baseColor--link avatar\" href=\"https://medium.com/@william_85621\" data-action=\"show-user-card\" data-action-value=\"826bdd10f9aa\" data-action-type=\"hover\" data-user-id=\"826bdd10f9aa\" dir=\"auto\"><img src=\"https://cdn-images-1.medium.com/fit/c/36/36/1*LrhAeR8ys6QcgyNJdygaAw.png\" class=\"avatar-image u-size36x36 u-xs-size32x32\" alt=\"Go to the profile of William Thorsen\"></a></div><div class=\"postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis\"><a class=\"ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken\" href=\"https://medium.com/@william_85621?source=responses---------0-31--------------------\" data-action=\"show-user-card\" data-action-source=\"responses---------0-31--------------------\" data-action-value=\"826bdd10f9aa\" data-action-type=\"hover\" data-user-id=\"826bdd10f9aa\" dir=\"auto\">William Thorsen</a><div class=\"ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental\"><a class=\"link link--darken\" href=\"https://medium.com/@william_85621/great-explanation-4c1590d87d72?source=responses---------0-31--------------------\" data-action=\"open-post\" data-action-value=\"https://medium.com/@william_85621/great-explanation-4c1590d87d72?source=responses---------0-31--------------------\" data-action-source=\"preview-listing\"><time datetime=\"2018-02-16T02:56:18.057Z\">Feb 15</time></a></div></div></div></div></div><div><a class=\"\" href=\"https://medium.com/@william_85621/great-explanation-4c1590d87d72?source=responses---------0-31--------------------\" data-action-source=\"responses---------0-31--------------------\"><div class=\"postArticle-content js-postField\"><section class=\"section section--body section--first section--last\"><div class=\"section-divider\"><hr class=\"section-divider\"></div><div class=\"section-content\"><div class=\"section-inner sectionLayout--insetColumn\"><p name=\"0fc0\" id=\"0fc0\" class=\"graf graf--p graf--leading\">Great explanation. One note: if you <strong class=\"markup--strong markup--p-strong\">triple-escape</strong> the double quotation marks, <code class=\"markup--code markup--p-code\">cross-env</code> will successfully set the environment variable on both Windows and Unix platforms:</p><pre name=\"56ca\" id=\"56ca\" class=\"graf graf--pre graf-after--p graf--trailing\"><code class=\"markup--code markup--pre-code\">{<br>  \"scripts\": {<br>    \"test\": \"cross-env TS_NODE_COMPILER_OPTIONS='{\\\\\\\"module\\\\\\\":\\\\\\\"commonjs\\\\\\\"}' mocha -r ts-node/register -r ignore-styles -r jsdom-global/register src/**/*.spec.ts\"<br>  }<br>}</code></pre></div></div></section></div></a></div><div class=\"u-clearfix u-paddingTop10\"><div class=\"u-floatLeft\"><div class=\"multirecommend js-actionMultirecommend u-flexCenter\" data-post-id=\"4c1590d87d72\" data-is-flush-left=\"true\" data-source=\"listing-----4c1590d87d72---------------------clap_preview\"><div class=\"u-relative u-foreground\"><button class=\"button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton\" data-action=\"sign-up-prompt\" data-sign-in-action=\"multivote\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/vote/p/4c1590d87d72\" data-action-source=\"listing-----4c1590d87d72---------------------clap_preview\" aria-label=\"Clap\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--clap svgIcon--25px is-flushLeft\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.739 0l.761 2.966L13.261 0z\"></path><path d=\"M14.815 3.776l1.84-2.551-1.43-.471z\"></path><path d=\"M8.378 1.224l1.84 2.551L9.81.753z\"></path><path d=\"M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 0 1 .66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 0 1 .707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 0 0 .624-.624L4.11 14.04l-1.75-1.75a.998.998 0 1 1 1.41-1.413l4.154 4.156a.44.44 0 0 0 .624 0 .44.44 0 0 0 0-.624l-4.152-4.153-1.172-1.171a.998.998 0 0 1 0-1.41 1.018 1.018 0 0 1 1.41 0l1.172 1.17 4.153 4.152a.437.437 0 0 0 .624 0 .442.442 0 0 0 0-.624L6.43 8.222a.988.988 0 0 1-.291-.705.99.99 0 0 1 .29-.706 1 1 0 0 1 1.412 0l6.992 6.993a.443.443 0 0 0 .71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 0 1 .66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 0 1-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 0 1 1.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 0 0-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 0 0-1.095-.562 1.776 1.776 0 0 0-.992.128l-2.636-2.636a1.883 1.883 0 0 0-2.658 0 1.862 1.862 0 0 0-.478.847 1.886 1.886 0 0 0-2.671-.012 1.867 1.867 0 0 0-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 0 0 0 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 0 0 0 2.659l.624.622a1.879 1.879 0 0 0-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 0 0 1.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z\"></path></g></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.738 0l.762 2.966L13.262 0z\"></path><path d=\"M16.634 1.224l-1.432-.47-.408 3.022z\"></path><path d=\"M9.79.754l-1.431.47 1.84 2.552z\"></path><path d=\"M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 0 0-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 0 1-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914\"></path><path d=\"M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z\"></path><path d=\"M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 0 0-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 1 1-.868.612L7.2 6.378a.986.986 0 1 0-1.395 1.395l4.401 4.403a.538.538 0 1 1-.762.762L5.046 8.54 3.802 7.295a.99.99 0 0 0-1.396 0 .981.981 0 0 0 0 1.394L3.647 9.93l4.402 4.403a.537.537 0 0 1 0 .761.535.535 0 0 1-.762 0L2.89 10.696a.992.992 0 0 0-1.399-.003.983.983 0 0 0 0 1.395l1.855 1.854 2.763 2.765a.538.538 0 0 1-.76.761l-2.765-2.764a.982.982 0 0 0-1.395 0 .989.989 0 0 0 0 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z\"></path></g></svg></span></span></button></div><span class=\"u-textAlignCenter u-relative u-background js-actionMultirecommendCount u-marginLeft5\"><button class=\"button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents\" data-action=\"show-recommends\" data-action-value=\"4c1590d87d72\">5</button></span></div></div><div class=\"buttonSet u-floatRight\"><a class=\"button button--chromeless u-baseColor--buttonNormal\" href=\"https://medium.com/@william_85621/great-explanation-4c1590d87d72?source=responses---------0-31--------------------#--responses\" data-action-source=\"responses---------0-31--------------------\">1 response</a><button class=\"button button--chromeless is-touchIconFadeInPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton\" title=\"Bookmark this story to read later\" aria-label=\"Bookmark this story to read later\" data-action=\"sign-up-prompt\" data-sign-in-action=\"add-to-bookmarks\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/bookmark/p/4c1590d87d72\" data-action-source=\"listing-----4c1590d87d72---------------------bookmark_preview\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--bookmark svgIcon--25px is-flushRight\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126a.508.508 0 0 0 .708-.03.5.5 0 0 0 .118-.285H19V6zm-6.838 9.97L7 19.636V6c0-.55.45-1 1-1h9c.55 0 1 .45 1 1v13.637l-5.162-3.668a.49.49 0 0 0-.676 0z\" fill-rule=\"evenodd\"></path></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 0 0 .118-.285H19V6z\"></path></svg></span></span></button></div></div></div></div></div><div class=\"streamItem streamItem--postPreview js-streamItem\" data-action-scope=\"_actionscope_7\"><div class=\"cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20\"><div class=\"postArticle postArticle--short js-postArticle js-trackedPost\" data-post-id=\"5c17f49bd25b\" data-source=\"responses---------1-31--------------------\" data-action-scope=\"_actionscope_8\" data-scroll=\"native\"><div class=\"u-marginBottom10\"><div class=\"postMetaInline\">Applause from <a class=\"link link--darken u-accentColor--textDarken u-baseColor--link\" href=\"https://medium.com/@artfuldev\" data-action=\"show-user-card\" data-action-value=\"f9927938f0d0\" data-action-type=\"hover\" data-user-id=\"f9927938f0d0\" dir=\"auto\">Sudarsan Balaji</a> (author)</div></div><div class=\"u-clearfix u-marginBottom15 u-paddingTop5\"><div class=\"postMetaInline u-floatLeft\"><div class=\"u-flexCenter\"><div class=\"postMetaInline-avatar u-flex0\"><a class=\"link u-baseColor--link avatar\" href=\"https://medium.com/@kevin.kirch12\" data-action=\"show-user-card\" data-action-value=\"941bf7078115\" data-action-type=\"hover\" data-user-id=\"941bf7078115\" dir=\"auto\"><img src=\"https://cdn-images-1.medium.com/fit/c/36/36/0*NS6EP08i9cRC372n.\" class=\"avatar-image u-size36x36 u-xs-size32x32\" alt=\"Go to the profile of Kevin Kirchhoff\"></a></div><div class=\"postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis\"><a class=\"ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken\" href=\"https://medium.com/@kevin.kirch12?source=responses---------1-31--------------------\" data-action=\"show-user-card\" data-action-source=\"responses---------1-31--------------------\" data-action-value=\"941bf7078115\" data-action-type=\"hover\" data-user-id=\"941bf7078115\" dir=\"auto\">Kevin Kirchhoff</a><div class=\"ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental\"><a class=\"link link--darken\" href=\"https://medium.com/@kevin.kirch12/in-case-it-helps-anybody-else-i-was-having-trouble-getting-all-of-my-tests-to-run-with-a-nested-5c17f49bd25b?source=responses---------1-31--------------------\" data-action=\"open-post\" data-action-value=\"https://medium.com/@kevin.kirch12/in-case-it-helps-anybody-else-i-was-having-trouble-getting-all-of-my-tests-to-run-with-a-nested-5c17f49bd25b?source=responses---------1-31--------------------\" data-action-source=\"preview-listing\"><time datetime=\"2017-12-21T23:57:06.208Z\">Dec 21, 2017</time></a><span class=\"middotDivider u-fontSize12\"></span><span class=\"readingTime\" title=\"1 min read\"></span></div></div></div></div></div><div class=\"js-inlineExpandBody\"><a class=\"\" href=\"https://medium.com/@kevin.kirch12/in-case-it-helps-anybody-else-i-was-having-trouble-getting-all-of-my-tests-to-run-with-a-nested-5c17f49bd25b?source=responses---------1-31--------------------\" data-action=\"expand-inline\"><div class=\"postArticle-content js-postField\"><section class=\"section section--body section--first section--last\"><div class=\"section-divider\"><hr class=\"section-divider\"></div><div class=\"section-content\"><div class=\"section-inner sectionLayout--insetColumn\"><p name=\"5142\" id=\"5142\" class=\"graf graf--p graf--leading\">In case it helps anybody else… I was having trouble getting all of my tests to run, with a nested folder structure. It turns out that if you’re on a unix-based system, it’s going to parse the glob pattern before mocha does.</p><p name=\"b1a0\" id=\"b1a0\" class=\"graf graf--p graf-after--p\">To get around this, wrap it in single quotes:</p><pre name=\"4b50\" id=\"4b50\" class=\"graf graf--pre graf-after--p graf--trailing\">mocha -r ts-node/register…</pre></div></div></section></div></a></div><div class=\"postArticle-readMore\"><button class=\"button button--smaller button--link u-baseColor--buttonNormal\" data-action=\"expand-inline\">Read more…</button></div><div class=\"u-clearfix u-paddingTop10\"><div class=\"u-floatLeft\"><div class=\"multirecommend js-actionMultirecommend u-flexCenter\" data-post-id=\"5c17f49bd25b\" data-is-flush-left=\"true\" data-source=\"listing-----5c17f49bd25b---------------------clap_preview\"><div class=\"u-relative u-foreground\"><button class=\"button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton\" data-action=\"sign-up-prompt\" data-sign-in-action=\"multivote\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/vote/p/5c17f49bd25b\" data-action-source=\"listing-----5c17f49bd25b---------------------clap_preview\" aria-label=\"Clap\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--clap svgIcon--25px is-flushLeft\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.739 0l.761 2.966L13.261 0z\"></path><path d=\"M14.815 3.776l1.84-2.551-1.43-.471z\"></path><path d=\"M8.378 1.224l1.84 2.551L9.81.753z\"></path><path d=\"M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 0 1 .66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 0 1 .707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 0 0 .624-.624L4.11 14.04l-1.75-1.75a.998.998 0 1 1 1.41-1.413l4.154 4.156a.44.44 0 0 0 .624 0 .44.44 0 0 0 0-.624l-4.152-4.153-1.172-1.171a.998.998 0 0 1 0-1.41 1.018 1.018 0 0 1 1.41 0l1.172 1.17 4.153 4.152a.437.437 0 0 0 .624 0 .442.442 0 0 0 0-.624L6.43 8.222a.988.988 0 0 1-.291-.705.99.99 0 0 1 .29-.706 1 1 0 0 1 1.412 0l6.992 6.993a.443.443 0 0 0 .71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 0 1 .66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 0 1-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 0 1 1.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 0 0-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 0 0-1.095-.562 1.776 1.776 0 0 0-.992.128l-2.636-2.636a1.883 1.883 0 0 0-2.658 0 1.862 1.862 0 0 0-.478.847 1.886 1.886 0 0 0-2.671-.012 1.867 1.867 0 0 0-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 0 0 0 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 0 0 0 2.659l.624.622a1.879 1.879 0 0 0-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 0 0 1.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z\"></path></g></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.738 0l.762 2.966L13.262 0z\"></path><path d=\"M16.634 1.224l-1.432-.47-.408 3.022z\"></path><path d=\"M9.79.754l-1.431.47 1.84 2.552z\"></path><path d=\"M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 0 0-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 0 1-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914\"></path><path d=\"M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z\"></path><path d=\"M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 0 0-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 1 1-.868.612L7.2 6.378a.986.986 0 1 0-1.395 1.395l4.401 4.403a.538.538 0 1 1-.762.762L5.046 8.54 3.802 7.295a.99.99 0 0 0-1.396 0 .981.981 0 0 0 0 1.394L3.647 9.93l4.402 4.403a.537.537 0 0 1 0 .761.535.535 0 0 1-.762 0L2.89 10.696a.992.992 0 0 0-1.399-.003.983.983 0 0 0 0 1.395l1.855 1.854 2.763 2.765a.538.538 0 0 1-.76.761l-2.765-2.764a.982.982 0 0 0-1.395 0 .989.989 0 0 0 0 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z\"></path></g></svg></span></span></button></div><span class=\"u-textAlignCenter u-relative u-background js-actionMultirecommendCount u-marginLeft5\"><button class=\"button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents\" data-action=\"show-recommends\" data-action-value=\"5c17f49bd25b\">4</button></span></div></div><div class=\"buttonSet u-floatRight\"><button class=\"button button--chromeless is-touchIconFadeInPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton\" title=\"Bookmark this story to read later\" aria-label=\"Bookmark this story to read later\" data-action=\"sign-up-prompt\" data-sign-in-action=\"add-to-bookmarks\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/bookmark/p/5c17f49bd25b\" data-action-source=\"listing-----5c17f49bd25b---------------------bookmark_preview\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--bookmark svgIcon--25px is-flushRight\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126a.508.508 0 0 0 .708-.03.5.5 0 0 0 .118-.285H19V6zm-6.838 9.97L7 19.636V6c0-.55.45-1 1-1h9c.55 0 1 .45 1 1v13.637l-5.162-3.668a.49.49 0 0 0-.676 0z\" fill-rule=\"evenodd\"></path></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 0 0 .118-.285H19V6z\"></path></svg></span></span></button></div></div></div></div></div><div class=\"streamItem streamItem--conversation js-streamItem\" data-action-scope=\"_actionscope_9\"><div class=\"streamItemConversation\"><div class=\"u-marginLeft20\"><div class=\"streamItemConversation-divider\"></div><header class=\"heading heading--light heading--simple\"><div class=\"u-clearfix\"><div class=\"heading-content u-floatLeft\"><span class=\"heading-title\">Conversation with <a class=\"link link--accent u-accentColor--textNormal u-baseColor--link\" href=\"https://medium.com/@artfuldev\" data-action=\"show-user-card\" data-action-value=\"f9927938f0d0\" data-action-type=\"hover\" data-user-id=\"f9927938f0d0\" dir=\"auto\">Sudarsan Balaji</a>.</span></div></div></header></div><div class=\"streamItemConversation-inner cardChromeless\"><div class=\"streamItemConversationItem streamItemConversationItem--preview\"><div class=\"postArticle js-postArticle js-trackedPost postArticle--short\" data-post-id=\"dfdafe48a298\" data-source=\"responses---------2----------------\" data-action-scope=\"_actionscope_10\" data-scroll=\"native\"><div class=\"u-clearfix u-marginBottom15 u-paddingTop5\"><div class=\"postMetaInline u-floatLeft\"><div class=\"u-flexCenter\"><div class=\"postMetaInline-avatar u-flex0\"><a class=\"link u-baseColor--link avatar\" href=\"https://medium.com/@makstaks\" data-action=\"show-user-card\" data-action-value=\"9267612ff3d5\" data-action-type=\"hover\" data-user-id=\"9267612ff3d5\" dir=\"auto\"><img src=\"https://cdn-images-1.medium.com/fit/c/36/36/1*TyGAYdA8nu_-jsUWSD1rhg.jpeg\" class=\"avatar-image u-size36x36 u-xs-size32x32\" alt=\"Go to the profile of Harrison Mak\"></a></div><div class=\"postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis\"><a class=\"ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken\" href=\"https://medium.com/@makstaks?source=responses---------2----------------\" data-action=\"show-user-card\" data-action-source=\"responses---------2----------------\" data-action-value=\"9267612ff3d5\" data-action-type=\"hover\" data-user-id=\"9267612ff3d5\" dir=\"auto\">Harrison Mak</a><div class=\"ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental\"><a class=\"link link--darken\" href=\"https://medium.com/@makstaks/what-about-version-5-makes-this-true-dfdafe48a298?source=responses---------2----------------\" data-action=\"open-post\" data-action-value=\"https://medium.com/@makstaks/what-about-version-5-makes-this-true-dfdafe48a298?source=responses---------2----------------\" data-action-source=\"preview-listing\"><time datetime=\"2017-10-14T19:30:23.989Z\">Oct 14, 2017</time></a></div></div></div></div></div><a href=\"https://journal.artfuldev.com/unit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2#cd49\"><div class=\"u-fontSize14 u-marginTop10 u-marginBottom20 u-padding14 u-xs-padding12 u-borderRadius3 u-borderCardBackground u-borderLighterHover u-boxShadow1px4pxCardBorder\"><div class=\"label label--quote u-accentColor--highlightFaint\">The version 5 makes it unnecessary to use a package manager like yarn, so we can stick to it.</div></div></a><div><a class=\"\" href=\"https://medium.com/@makstaks/what-about-version-5-makes-this-true-dfdafe48a298?source=responses---------2----------------\"><div class=\"postArticle-content js-postField\"><section class=\"section section--body section--first section--last\"><div class=\"section-divider\"><hr class=\"section-divider\"></div><div class=\"section-content\"><div class=\"section-inner sectionLayout--insetColumn\"><p name=\"e785\" id=\"e785\" class=\"graf graf--p graf--leading graf--trailing\">What about version 5 makes this true?</p></div></div></section></div></a></div><div class=\"u-clearfix u-paddingTop10\"><div class=\"u-floatLeft\"><div class=\"multirecommend js-actionMultirecommend u-flexCenter\" data-post-id=\"dfdafe48a298\" data-is-flush-left=\"true\" data-source=\"listing-----dfdafe48a298---------------------clap_preview\"><div class=\"u-relative u-foreground\"><button class=\"button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton\" data-action=\"sign-up-prompt\" data-sign-in-action=\"multivote\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/vote/p/dfdafe48a298\" data-action-source=\"listing-----dfdafe48a298---------------------clap_preview\" aria-label=\"Clap\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--clap svgIcon--25px is-flushLeft\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.739 0l.761 2.966L13.261 0z\"></path><path d=\"M14.815 3.776l1.84-2.551-1.43-.471z\"></path><path d=\"M8.378 1.224l1.84 2.551L9.81.753z\"></path><path d=\"M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 0 1 .66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 0 1 .707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 0 0 .624-.624L4.11 14.04l-1.75-1.75a.998.998 0 1 1 1.41-1.413l4.154 4.156a.44.44 0 0 0 .624 0 .44.44 0 0 0 0-.624l-4.152-4.153-1.172-1.171a.998.998 0 0 1 0-1.41 1.018 1.018 0 0 1 1.41 0l1.172 1.17 4.153 4.152a.437.437 0 0 0 .624 0 .442.442 0 0 0 0-.624L6.43 8.222a.988.988 0 0 1-.291-.705.99.99 0 0 1 .29-.706 1 1 0 0 1 1.412 0l6.992 6.993a.443.443 0 0 0 .71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 0 1 .66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 0 1-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 0 1 1.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 0 0-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 0 0-1.095-.562 1.776 1.776 0 0 0-.992.128l-2.636-2.636a1.883 1.883 0 0 0-2.658 0 1.862 1.862 0 0 0-.478.847 1.886 1.886 0 0 0-2.671-.012 1.867 1.867 0 0 0-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 0 0 0 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 0 0 0 2.659l.624.622a1.879 1.879 0 0 0-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 0 0 1.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z\"></path></g></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.738 0l.762 2.966L13.262 0z\"></path><path d=\"M16.634 1.224l-1.432-.47-.408 3.022z\"></path><path d=\"M9.79.754l-1.431.47 1.84 2.552z\"></path><path d=\"M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 0 0-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 0 1-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914\"></path><path d=\"M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z\"></path><path d=\"M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 0 0-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 1 1-.868.612L7.2 6.378a.986.986 0 1 0-1.395 1.395l4.401 4.403a.538.538 0 1 1-.762.762L5.046 8.54 3.802 7.295a.99.99 0 0 0-1.396 0 .981.981 0 0 0 0 1.394L3.647 9.93l4.402 4.403a.537.537 0 0 1 0 .761.535.535 0 0 1-.762 0L2.89 10.696a.992.992 0 0 0-1.399-.003.983.983 0 0 0 0 1.395l1.855 1.854 2.763 2.765a.538.538 0 0 1-.76.761l-2.765-2.764a.982.982 0 0 0-1.395 0 .989.989 0 0 0 0 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z\"></path></g></svg></span></span></button></div><span class=\"u-textAlignCenter u-relative u-background js-actionMultirecommendCount u-marginLeft5\"></span></div></div><div class=\"buttonSet u-floatRight\"><a class=\"button button--chromeless u-baseColor--buttonNormal\" href=\"https://medium.com/@makstaks/what-about-version-5-makes-this-true-dfdafe48a298?source=responses---------2----------------#--responses\" data-action-source=\"responses---------2----------------\">1 response</a><button class=\"button button--chromeless is-touchIconFadeInPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton\" title=\"Bookmark this story to read later\" aria-label=\"Bookmark this story to read later\" data-action=\"sign-up-prompt\" data-sign-in-action=\"add-to-bookmarks\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/bookmark/p/dfdafe48a298\" data-action-source=\"listing-----dfdafe48a298---------------------bookmark_preview\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--bookmark svgIcon--25px is-flushRight\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126a.508.508 0 0 0 .708-.03.5.5 0 0 0 .118-.285H19V6zm-6.838 9.97L7 19.636V6c0-.55.45-1 1-1h9c.55 0 1 .45 1 1v13.637l-5.162-3.668a.49.49 0 0 0-.676 0z\" fill-rule=\"evenodd\"></path></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 0 0 .118-.285H19V6z\"></path></svg></span></span></button></div></div></div></div><div class=\"streamItemConversationItem streamItemConversationItem--preview\"><div class=\"postArticle js-postArticle js-trackedPost postArticle--short\" data-post-id=\"a8c9a6557c4c\" data-source=\"responses---------2----------------\" data-action-scope=\"_actionscope_11\" data-scroll=\"native\"><div class=\"u-clearfix u-marginBottom15 u-paddingTop5\"><div class=\"postMetaInline u-floatLeft\"><div class=\"u-flexCenter\"><div class=\"postMetaInline-avatar u-flex0\"><a class=\"link u-baseColor--link avatar\" href=\"https://medium.com/@artfuldev\" data-action=\"show-user-card\" data-action-value=\"f9927938f0d0\" data-action-type=\"hover\" data-user-id=\"f9927938f0d0\" dir=\"auto\"><img src=\"https://cdn-images-1.medium.com/fit/c/36/36/0*PnnfhI54q5g94WEk.jpg\" class=\"avatar-image u-size36x36 u-xs-size32x32\" alt=\"Go to the profile of Sudarsan Balaji\"></a></div><div class=\"postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis\"><a class=\"ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken\" href=\"https://medium.com/@artfuldev?source=responses---------2----------------\" data-action=\"show-user-card\" data-action-source=\"responses---------2----------------\" data-action-value=\"f9927938f0d0\" data-action-type=\"hover\" data-user-id=\"f9927938f0d0\" dir=\"auto\">Sudarsan Balaji</a><div class=\"ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental\"><a class=\"link link--darken\" href=\"https://medium.com/@artfuldev/version-5-of-the-node-package-manager-npm-introduced-a-new-and-standardized-lockfile-feature-for-a8c9a6557c4c?source=responses---------2----------------\" data-action=\"open-post\" data-action-value=\"https://medium.com/@artfuldev/version-5-of-the-node-package-manager-npm-introduced-a-new-and-standardized-lockfile-feature-for-a8c9a6557c4c?source=responses---------2----------------\" data-action-source=\"preview-listing\"><time datetime=\"2017-10-16T02:14:25.643Z\">Oct 15, 2017</time></a></div></div></div></div></div><div><a class=\"\" href=\"https://medium.com/@artfuldev/version-5-of-the-node-package-manager-npm-introduced-a-new-and-standardized-lockfile-feature-for-a8c9a6557c4c?source=responses---------2----------------\"><div class=\"postArticle-content js-postField\"><section class=\"section section--body section--first section--last\"><div class=\"section-divider\"><hr class=\"section-divider\"></div><div class=\"section-content\"><div class=\"section-inner sectionLayout--insetColumn\"><p name=\"8474\" id=\"8474\" class=\"graf graf--p graf--leading\">Version 5 of the node package manager (npm) introduced a new and standardized lockfile feature for cross-package-manager compatibility, while also improving caching.</p><p name=\"90a1\" id=\"90a1\" class=\"graf graf--p graf-after--p graf--trailing\">For more details you can check out the changelog here <span class=\"markup--anchor markup--p-anchor\" data-action=\"open-inner-link\" data-action-value=\"http://blog.npmjs.org/post/161081169345/v500\">http://blog.npmjs.org/post/161081169345/v500</span></p></div></div></section></div></a></div><div class=\"u-clearfix u-paddingTop10\"><div class=\"u-floatLeft\"><div class=\"multirecommend js-actionMultirecommend u-flexCenter\" data-post-id=\"a8c9a6557c4c\" data-is-flush-left=\"true\" data-source=\"listing-----a8c9a6557c4c---------------------clap_preview\"><div class=\"u-relative u-foreground\"><button class=\"button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton\" data-action=\"sign-up-prompt\" data-sign-in-action=\"multivote\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/vote/p/a8c9a6557c4c\" data-action-source=\"listing-----a8c9a6557c4c---------------------clap_preview\" aria-label=\"Clap\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--clap svgIcon--25px is-flushLeft\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.739 0l.761 2.966L13.261 0z\"></path><path d=\"M14.815 3.776l1.84-2.551-1.43-.471z\"></path><path d=\"M8.378 1.224l1.84 2.551L9.81.753z\"></path><path d=\"M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 0 1 .66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 0 1 .707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 0 0 .624-.624L4.11 14.04l-1.75-1.75a.998.998 0 1 1 1.41-1.413l4.154 4.156a.44.44 0 0 0 .624 0 .44.44 0 0 0 0-.624l-4.152-4.153-1.172-1.171a.998.998 0 0 1 0-1.41 1.018 1.018 0 0 1 1.41 0l1.172 1.17 4.153 4.152a.437.437 0 0 0 .624 0 .442.442 0 0 0 0-.624L6.43 8.222a.988.988 0 0 1-.291-.705.99.99 0 0 1 .29-.706 1 1 0 0 1 1.412 0l6.992 6.993a.443.443 0 0 0 .71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 0 1 .66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 0 1-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 0 1 1.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 0 0-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 0 0-1.095-.562 1.776 1.776 0 0 0-.992.128l-2.636-2.636a1.883 1.883 0 0 0-2.658 0 1.862 1.862 0 0 0-.478.847 1.886 1.886 0 0 0-2.671-.012 1.867 1.867 0 0 0-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 0 0 0 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 0 0 0 2.659l.624.622a1.879 1.879 0 0 0-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 0 0 1.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z\"></path></g></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.738 0l.762 2.966L13.262 0z\"></path><path d=\"M16.634 1.224l-1.432-.47-.408 3.022z\"></path><path d=\"M9.79.754l-1.431.47 1.84 2.552z\"></path><path d=\"M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 0 0-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 0 1-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914\"></path><path d=\"M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z\"></path><path d=\"M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 0 0-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 1 1-.868.612L7.2 6.378a.986.986 0 1 0-1.395 1.395l4.401 4.403a.538.538 0 1 1-.762.762L5.046 8.54 3.802 7.295a.99.99 0 0 0-1.396 0 .981.981 0 0 0 0 1.394L3.647 9.93l4.402 4.403a.537.537 0 0 1 0 .761.535.535 0 0 1-.762 0L2.89 10.696a.992.992 0 0 0-1.399-.003.983.983 0 0 0 0 1.395l1.855 1.854 2.763 2.765a.538.538 0 0 1-.76.761l-2.765-2.764a.982.982 0 0 0-1.395 0 .989.989 0 0 0 0 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z\"></path></g></svg></span></span></button></div><span class=\"u-textAlignCenter u-relative u-background js-actionMultirecommendCount u-marginLeft5\"><button class=\"button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents\" data-action=\"show-recommends\" data-action-value=\"a8c9a6557c4c\">10</button></span></div></div><div class=\"buttonSet u-floatRight\"><button class=\"button button--chromeless is-touchIconFadeInPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton\" title=\"Bookmark this story to read later\" aria-label=\"Bookmark this story to read later\" data-action=\"sign-up-prompt\" data-sign-in-action=\"add-to-bookmarks\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/bookmark/p/a8c9a6557c4c\" data-action-source=\"listing-----a8c9a6557c4c---------------------bookmark_preview\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--bookmark svgIcon--25px is-flushRight\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126a.508.508 0 0 0 .708-.03.5.5 0 0 0 .118-.285H19V6zm-6.838 9.97L7 19.636V6c0-.55.45-1 1-1h9c.55 0 1 .45 1 1v13.637l-5.162-3.668a.49.49 0 0 0-.676 0z\" fill-rule=\"evenodd\"></path></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 0 0 .118-.285H19V6z\"></path></svg></span></span></button></div></div></div></div></div></div></div><div class=\"streamItem streamItem--conversation js-streamItem\" data-action-scope=\"_actionscope_12\"><div class=\"streamItemConversation\"><div class=\"u-marginLeft20\"><div class=\"streamItemConversation-divider\"></div><header class=\"heading heading--light heading--simple\"><div class=\"u-clearfix\"><div class=\"heading-content u-floatLeft\"><span class=\"heading-title\">Conversation with <a class=\"link link--accent u-accentColor--textNormal u-baseColor--link\" href=\"https://medium.com/@artfuldev\" data-action=\"show-user-card\" data-action-value=\"f9927938f0d0\" data-action-type=\"hover\" data-user-id=\"f9927938f0d0\" dir=\"auto\">Sudarsan Balaji</a>.</span></div></div></header></div><div class=\"streamItemConversation-inner cardChromeless\"><div class=\"streamItemConversationItem streamItemConversationItem--preview\"><div class=\"postArticle js-postArticle js-trackedPost postArticle--short\" data-post-id=\"c435db57e067\" data-source=\"responses---------3----------------\" data-action-scope=\"_actionscope_13\" data-scroll=\"native\"><div class=\"u-clearfix u-marginBottom15 u-paddingTop5\"><div class=\"postMetaInline u-floatLeft\"><div class=\"u-flexCenter\"><div class=\"postMetaInline-avatar u-flex0\"><a class=\"link u-baseColor--link avatar\" href=\"https://medium.com/@cashalot\" data-action=\"show-user-card\" data-action-value=\"9ded95e9f7a1\" data-action-type=\"hover\" data-user-id=\"9ded95e9f7a1\" dir=\"auto\"><img src=\"https://cdn-images-1.medium.com/fit/c/36/36/1*ibQKOZLEXp4QvYgY5iZPtA.jpeg\" class=\"avatar-image u-size36x36 u-xs-size32x32\" alt=\"Go to the profile of Nikita\"></a></div><div class=\"postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis\"><a class=\"ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken\" href=\"https://medium.com/@cashalot?source=responses---------3----------------\" data-action=\"show-user-card\" data-action-source=\"responses---------3----------------\" data-action-value=\"9ded95e9f7a1\" data-action-type=\"hover\" data-user-id=\"9ded95e9f7a1\" dir=\"auto\">Nikita</a><div class=\"ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental\"><a class=\"link link--darken\" href=\"https://medium.com/@cashalot/thanks-for-explanation-really-useful-unit-testing-with-ts-is-just-pretty-awesome-c435db57e067?source=responses---------3----------------\" data-action=\"open-post\" data-action-value=\"https://medium.com/@cashalot/thanks-for-explanation-really-useful-unit-testing-with-ts-is-just-pretty-awesome-c435db57e067?source=responses---------3----------------\" data-action-source=\"preview-listing\"><time datetime=\"2017-09-29T17:09:02.247Z\">Sep 29, 2017</time></a></div></div></div></div></div><div><a class=\"\" href=\"https://medium.com/@cashalot/thanks-for-explanation-really-useful-unit-testing-with-ts-is-just-pretty-awesome-c435db57e067?source=responses---------3----------------\"><div class=\"postArticle-content js-postField\"><section class=\"section section--body section--first section--last\"><div class=\"section-divider\"><hr class=\"section-divider\"></div><div class=\"section-content\"><div class=\"section-inner sectionLayout--insetColumn\"><p name=\"6227\" id=\"6227\" class=\"graf graf--p graf--leading graf--trailing\">Thanks for explanation, really useful. Unit testing with TS is just pretty awesome!</p></div></div></section></div></a></div><div class=\"u-clearfix u-paddingTop10\"><div class=\"u-floatLeft\"><div class=\"multirecommend js-actionMultirecommend u-flexCenter\" data-post-id=\"c435db57e067\" data-is-flush-left=\"true\" data-source=\"listing-----c435db57e067---------------------clap_preview\"><div class=\"u-relative u-foreground\"><button class=\"button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton\" data-action=\"sign-up-prompt\" data-sign-in-action=\"multivote\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/vote/p/c435db57e067\" data-action-source=\"listing-----c435db57e067---------------------clap_preview\" aria-label=\"Clap\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--clap svgIcon--25px is-flushLeft\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.739 0l.761 2.966L13.261 0z\"></path><path d=\"M14.815 3.776l1.84-2.551-1.43-.471z\"></path><path d=\"M8.378 1.224l1.84 2.551L9.81.753z\"></path><path d=\"M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 0 1 .66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 0 1 .707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 0 0 .624-.624L4.11 14.04l-1.75-1.75a.998.998 0 1 1 1.41-1.413l4.154 4.156a.44.44 0 0 0 .624 0 .44.44 0 0 0 0-.624l-4.152-4.153-1.172-1.171a.998.998 0 0 1 0-1.41 1.018 1.018 0 0 1 1.41 0l1.172 1.17 4.153 4.152a.437.437 0 0 0 .624 0 .442.442 0 0 0 0-.624L6.43 8.222a.988.988 0 0 1-.291-.705.99.99 0 0 1 .29-.706 1 1 0 0 1 1.412 0l6.992 6.993a.443.443 0 0 0 .71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 0 1 .66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 0 1-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 0 1 1.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 0 0-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 0 0-1.095-.562 1.776 1.776 0 0 0-.992.128l-2.636-2.636a1.883 1.883 0 0 0-2.658 0 1.862 1.862 0 0 0-.478.847 1.886 1.886 0 0 0-2.671-.012 1.867 1.867 0 0 0-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 0 0 0 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 0 0 0 2.659l.624.622a1.879 1.879 0 0 0-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 0 0 1.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z\"></path></g></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.738 0l.762 2.966L13.262 0z\"></path><path d=\"M16.634 1.224l-1.432-.47-.408 3.022z\"></path><path d=\"M9.79.754l-1.431.47 1.84 2.552z\"></path><path d=\"M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 0 0-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 0 1-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914\"></path><path d=\"M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z\"></path><path d=\"M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 0 0-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 1 1-.868.612L7.2 6.378a.986.986 0 1 0-1.395 1.395l4.401 4.403a.538.538 0 1 1-.762.762L5.046 8.54 3.802 7.295a.99.99 0 0 0-1.396 0 .981.981 0 0 0 0 1.394L3.647 9.93l4.402 4.403a.537.537 0 0 1 0 .761.535.535 0 0 1-.762 0L2.89 10.696a.992.992 0 0 0-1.399-.003.983.983 0 0 0 0 1.395l1.855 1.854 2.763 2.765a.538.538 0 0 1-.76.761l-2.765-2.764a.982.982 0 0 0-1.395 0 .989.989 0 0 0 0 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z\"></path></g></svg></span></span></button></div><span class=\"u-textAlignCenter u-relative u-background js-actionMultirecommendCount u-marginLeft5\"></span></div></div><div class=\"buttonSet u-floatRight\"><a class=\"button button--chromeless u-baseColor--buttonNormal\" href=\"https://medium.com/@cashalot/thanks-for-explanation-really-useful-unit-testing-with-ts-is-just-pretty-awesome-c435db57e067?source=responses---------3----------------#--responses\" data-action-source=\"responses---------3----------------\">1 response</a><button class=\"button button--chromeless is-touchIconFadeInPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton\" title=\"Bookmark this story to read later\" aria-label=\"Bookmark this story to read later\" data-action=\"sign-up-prompt\" data-sign-in-action=\"add-to-bookmarks\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/bookmark/p/c435db57e067\" data-action-source=\"listing-----c435db57e067---------------------bookmark_preview\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--bookmark svgIcon--25px is-flushRight\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126a.508.508 0 0 0 .708-.03.5.5 0 0 0 .118-.285H19V6zm-6.838 9.97L7 19.636V6c0-.55.45-1 1-1h9c.55 0 1 .45 1 1v13.637l-5.162-3.668a.49.49 0 0 0-.676 0z\" fill-rule=\"evenodd\"></path></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 0 0 .118-.285H19V6z\"></path></svg></span></span></button></div></div></div></div><div class=\"streamItemConversationItem streamItemConversationItem--preview\"><div class=\"postArticle js-postArticle js-trackedPost postArticle--short\" data-post-id=\"d03be96bac22\" data-source=\"responses---------3----------------\" data-action-scope=\"_actionscope_14\" data-scroll=\"native\"><div class=\"u-clearfix u-marginBottom15 u-paddingTop5\"><div class=\"postMetaInline u-floatLeft\"><div class=\"u-flexCenter\"><div class=\"postMetaInline-avatar u-flex0\"><a class=\"link u-baseColor--link avatar\" href=\"https://medium.com/@artfuldev\" data-action=\"show-user-card\" data-action-value=\"f9927938f0d0\" data-action-type=\"hover\" data-user-id=\"f9927938f0d0\" dir=\"auto\"><img src=\"https://cdn-images-1.medium.com/fit/c/36/36/0*PnnfhI54q5g94WEk.jpg\" class=\"avatar-image u-size36x36 u-xs-size32x32\" alt=\"Go to the profile of Sudarsan Balaji\"></a></div><div class=\"postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis\"><a class=\"ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken\" href=\"https://medium.com/@artfuldev?source=responses---------3----------------\" data-action=\"show-user-card\" data-action-source=\"responses---------3----------------\" data-action-value=\"f9927938f0d0\" data-action-type=\"hover\" data-user-id=\"f9927938f0d0\" dir=\"auto\">Sudarsan Balaji</a><div class=\"ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental\"><a class=\"link link--darken\" href=\"https://medium.com/@artfuldev/thanks-d03be96bac22?source=responses---------3----------------\" data-action=\"open-post\" data-action-value=\"https://medium.com/@artfuldev/thanks-d03be96bac22?source=responses---------3----------------\" data-action-source=\"preview-listing\"><time datetime=\"2017-09-29T17:45:47.513Z\">Sep 29, 2017</time></a></div></div></div></div></div><div><a class=\"\" href=\"https://medium.com/@artfuldev/thanks-d03be96bac22?source=responses---------3----------------\"><div class=\"postArticle-content js-postField\"><section class=\"section section--body section--first section--last\"><div class=\"section-divider\"><hr class=\"section-divider\"></div><div class=\"section-content\"><div class=\"section-inner sectionLayout--insetColumn\"><p name=\"78d0\" id=\"78d0\" class=\"graf graf--p graf--leading\">Thanks!</p><p name=\"fa5f\" id=\"fa5f\" class=\"graf graf--p graf-after--p graf--trailing\">Glad to know you found it useful.</p></div></div></section></div></a></div><div class=\"u-clearfix u-paddingTop10\"><div class=\"u-floatLeft\"><div class=\"multirecommend js-actionMultirecommend u-flexCenter\" data-post-id=\"d03be96bac22\" data-is-flush-left=\"true\" data-source=\"listing-----d03be96bac22---------------------clap_preview\"><div class=\"u-relative u-foreground\"><button class=\"button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton\" data-action=\"sign-up-prompt\" data-sign-in-action=\"multivote\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/vote/p/d03be96bac22\" data-action-source=\"listing-----d03be96bac22---------------------clap_preview\" aria-label=\"Clap\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--clap svgIcon--25px is-flushLeft\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.739 0l.761 2.966L13.261 0z\"></path><path d=\"M14.815 3.776l1.84-2.551-1.43-.471z\"></path><path d=\"M8.378 1.224l1.84 2.551L9.81.753z\"></path><path d=\"M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 0 1 .66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 0 1 .707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 0 0 .624-.624L4.11 14.04l-1.75-1.75a.998.998 0 1 1 1.41-1.413l4.154 4.156a.44.44 0 0 0 .624 0 .44.44 0 0 0 0-.624l-4.152-4.153-1.172-1.171a.998.998 0 0 1 0-1.41 1.018 1.018 0 0 1 1.41 0l1.172 1.17 4.153 4.152a.437.437 0 0 0 .624 0 .442.442 0 0 0 0-.624L6.43 8.222a.988.988 0 0 1-.291-.705.99.99 0 0 1 .29-.706 1 1 0 0 1 1.412 0l6.992 6.993a.443.443 0 0 0 .71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 0 1 .66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 0 1-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 0 1 1.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 0 0-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 0 0-1.095-.562 1.776 1.776 0 0 0-.992.128l-2.636-2.636a1.883 1.883 0 0 0-2.658 0 1.862 1.862 0 0 0-.478.847 1.886 1.886 0 0 0-2.671-.012 1.867 1.867 0 0 0-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 0 0 0 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 0 0 0 2.659l.624.622a1.879 1.879 0 0 0-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 0 0 1.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z\"></path></g></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><g fill-rule=\"evenodd\"><path d=\"M11.738 0l.762 2.966L13.262 0z\"></path><path d=\"M16.634 1.224l-1.432-.47-.408 3.022z\"></path><path d=\"M9.79.754l-1.431.47 1.84 2.552z\"></path><path d=\"M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 0 0-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 0 1-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914\"></path><path d=\"M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z\"></path><path d=\"M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 0 0-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 1 1-.868.612L7.2 6.378a.986.986 0 1 0-1.395 1.395l4.401 4.403a.538.538 0 1 1-.762.762L5.046 8.54 3.802 7.295a.99.99 0 0 0-1.396 0 .981.981 0 0 0 0 1.394L3.647 9.93l4.402 4.403a.537.537 0 0 1 0 .761.535.535 0 0 1-.762 0L2.89 10.696a.992.992 0 0 0-1.399-.003.983.983 0 0 0 0 1.395l1.855 1.854 2.763 2.765a.538.538 0 0 1-.76.761l-2.765-2.764a.982.982 0 0 0-1.395 0 .989.989 0 0 0 0 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z\"></path></g></svg></span></span></button></div><span class=\"u-textAlignCenter u-relative u-background js-actionMultirecommendCount u-marginLeft5\"></span></div></div><div class=\"buttonSet u-floatRight\"><button class=\"button button--chromeless is-touchIconFadeInPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton\" title=\"Bookmark this story to read later\" aria-label=\"Bookmark this story to read later\" data-action=\"sign-up-prompt\" data-sign-in-action=\"add-to-bookmarks\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/bookmark/p/d03be96bac22\" data-action-source=\"listing-----d03be96bac22---------------------bookmark_preview\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--bookmark svgIcon--25px is-flushRight\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126a.508.508 0 0 0 .708-.03.5.5 0 0 0 .118-.285H19V6zm-6.838 9.97L7 19.636V6c0-.55.45-1 1-1h9c.55 0 1 .45 1 1v13.637l-5.162-3.668a.49.49 0 0 0-.676 0z\" fill-rule=\"evenodd\"></path></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight\"><svg class=\"svgIcon-use\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\"><path d=\"M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 0 0 .118-.285H19V6z\"></path></svg></span></span></button></div></div></div></div></div></div></div></div><div class=\"container js-showOtherResponses\"><div class=\"row\"><button class=\"button button--primary button--withChrome u-accentColor--buttonNormal responsesStream-showOtherResponses cardChromeless u-sizeFullWidth u-marginVertical20 u-heightAuto\" data-action=\"show-other-responses\">Show all responses</button></div></div><div class=\"responsesStream js-responsesStreamOther\"></div></div></div></div><div class=\"supplementalPostContent js-heroPromo\"></div></footer></article></main><aside class=\"u-marginAuto u-maxWidth1000 js-postLeftSidebar\"><div class=\"u-foreground u-top0 u-fixed u-sm-hide u-marginLeftNegative12 js-postShareWidget u-transition--fadeIn300\" data-scroll=\"fixed\" style=\"transform: translateY(150px);\"><ul><li class=\"u-textAlignCenter u-marginVertical10\"><div class=\"multirecommend js-actionMultirecommend u-flexColumn u-marginBottom10 u-width60\" data-post-id=\"384ef05f32b2\" data-is-icon-29px=\"true\" data-is-vertical=\"true\" data-is-circle=\"true\" data-has-recommend-list=\"true\" data-source=\"post_share_widget-----384ef05f32b2---------------------clap_sidebar\"><div class=\"u-relative u-foreground\"><button class=\"button button--large button--circle button--withChrome u-baseColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--largePill u-relative u-foreground u-xs-paddingLeft13 u-width60 u-height60 u-accentColor--textNormal u-accentColor--buttonNormal\" data-action=\"sign-up-prompt\" data-sign-in-action=\"multivote\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/vote/p/384ef05f32b2\" data-action-source=\"post_share_widget-----384ef05f32b2---------------------clap_sidebar\" aria-label=\"Clap\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--clap svgIcon--33px u-relative u-topNegative2 u-xs-top0\"><svg class=\"svgIcon-use\" width=\"33\" height=\"33\" viewBox=\"0 0 33 33\"><path d=\"M28.86 17.342l-3.64-6.402c-.292-.433-.712-.729-1.163-.8a1.124 1.124 0 0 0-.889.213c-.63.488-.742 1.181-.33 2.061l1.222 2.587 1.4 2.46c2.234 4.085 1.511 8.007-2.145 11.663-.26.26-.526.49-.797.707 1.42-.084 2.881-.683 4.292-2.094 3.822-3.823 3.565-7.876 2.05-10.395zm-6.252 11.075c3.352-3.35 3.998-6.775 1.978-10.469l-3.378-5.945c-.292-.432-.712-.728-1.163-.8a1.122 1.122 0 0 0-.89.213c-.63.49-.742 1.182-.33 2.061l1.72 3.638a.502.502 0 0 1-.806.568l-8.91-8.91a1.335 1.335 0 0 0-1.887 1.886l5.292 5.292a.5.5 0 0 1-.707.707l-5.292-5.292-1.492-1.492c-.503-.503-1.382-.505-1.887 0a1.337 1.337 0 0 0 0 1.886l1.493 1.492 5.292 5.292a.499.499 0 0 1-.353.854.5.5 0 0 1-.354-.147L5.642 13.96a1.338 1.338 0 0 0-1.887 0 1.338 1.338 0 0 0 0 1.887l2.23 2.228 3.322 3.324a.499.499 0 0 1-.353.853.502.502 0 0 1-.354-.146l-3.323-3.324a1.333 1.333 0 0 0-1.886 0 1.325 1.325 0 0 0-.39.943c0 .356.138.691.39.943l6.396 6.397c3.528 3.53 8.86 5.313 12.821 1.353zM12.73 9.26l5.68 5.68-.49-1.037c-.518-1.107-.426-2.13.224-2.89l-3.303-3.304a1.337 1.337 0 0 0-1.886 0 1.326 1.326 0 0 0-.39.944c0 .217.067.42.165.607zm14.787 19.184c-1.599 1.6-3.417 2.392-5.353 2.392-.349 0-.7-.03-1.058-.082a7.922 7.922 0 0 1-3.667.887c-3.049 0-6.115-1.626-8.359-3.87l-6.396-6.397A2.315 2.315 0 0 1 2 19.724a2.327 2.327 0 0 1 1.923-2.296l-.875-.875a2.339 2.339 0 0 1 0-3.3 2.33 2.33 0 0 1 1.24-.647l-.139-.139c-.91-.91-.91-2.39 0-3.3.884-.884 2.421-.882 3.301 0l.138.14a2.335 2.335 0 0 1 3.948-1.24l.093.092c.091-.423.291-.828.62-1.157a2.336 2.336 0 0 1 3.3 0l3.384 3.386a2.167 2.167 0 0 1 1.271-.173c.534.086 1.03.354 1.441.765.11-.549.415-1.034.911-1.418a2.12 2.12 0 0 1 1.661-.41c.727.117 1.385.565 1.853 1.262l3.652 6.423c1.704 2.832 2.025 7.377-2.205 11.607zM13.217.484l-1.917.882 2.37 2.837-.454-3.719zm8.487.877l-1.928-.86-.44 3.697 2.368-2.837zM16.5 3.293L15.478-.005h2.044L16.5 3.293z\" fill-rule=\"evenodd\"></path></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--clapFilled svgIcon--33px u-relative u-topNegative2 u-xs-top0\"><svg class=\"svgIcon-use\" width=\"33\" height=\"33\" viewBox=\"0 0 33 33\"><g fill-rule=\"evenodd\"><path d=\"M29.58 17.1l-3.854-6.78c-.365-.543-.876-.899-1.431-.989a1.491 1.491 0 0 0-1.16.281c-.42.327-.65.736-.7 1.207v.001l3.623 6.367c2.46 4.498 1.67 8.802-2.333 12.807-.265.265-.536.505-.81.728 1.973-.222 3.474-1.286 4.45-2.263 4.166-4.165 3.875-8.6 2.215-11.36zm-4.831.82l-3.581-6.3c-.296-.439-.725-.742-1.183-.815a1.105 1.105 0 0 0-.89.213c-.647.502-.755 1.188-.33 2.098l1.825 3.858a.601.601 0 0 1-.197.747.596.596 0 0 1-.77-.067L10.178 8.21c-.508-.506-1.393-.506-1.901 0a1.335 1.335 0 0 0-.393.95c0 .36.139.698.393.95v.001l5.61 5.61a.599.599 0 1 1-.848.847l-5.606-5.606c-.001 0-.002 0-.003-.002L5.848 9.375a1.349 1.349 0 0 0-1.902 0 1.348 1.348 0 0 0 0 1.901l1.582 1.582 5.61 5.61a.6.6 0 0 1-.848.848l-5.61-5.61c-.51-.508-1.393-.508-1.9 0a1.332 1.332 0 0 0-.394.95c0 .36.139.697.393.952l2.363 2.362c.002.001.002.002.002.003l3.52 3.52a.6.6 0 0 1-.848.847l-3.522-3.523h-.001a1.336 1.336 0 0 0-.95-.393 1.345 1.345 0 0 0-.949 2.295l6.779 6.78c3.715 3.713 9.327 5.598 13.49 1.434 3.527-3.528 4.21-7.13 2.086-11.015zM11.817 7.727c.06-.328.213-.64.466-.893.64-.64 1.755-.64 2.396 0l3.232 3.232c-.82.783-1.09 1.833-.764 2.992l-5.33-5.33z\"></path><path d=\"M13.285.48l-1.916.881 2.37 2.837z\"></path><path d=\"M21.719 1.361L19.79.501l-.44 3.697z\"></path><path d=\"M16.502 3.298L15.481 0h2.043z\"></path></g></svg></span></span></button><div class=\"clapUndo u-width60 u-round u-height32 u-absolute u-borderBox u-paddingRight5 u-transition--transform200Spring u-background--brandSageLighter js-clapUndo\" style=\"top: 14px; padding: 2px;\"><button class=\"button button--chromeless u-baseColor--buttonNormal button--withIcon button--withSvgIcon u-floatRight\" data-action=\"multivote-undo\" data-action-value=\"384ef05f32b2\"><span class=\"svgIcon svgIcon--removeThin svgIcon--29px\"><svg class=\"svgIcon-use\" width=\"29\" height=\"29\" viewBox=\"0 0 29 29\"><path d=\"M20.13 8.11l-5.61 5.61-5.609-5.61-.801.801 5.61 5.61-5.61 5.61.801.8 5.61-5.609 5.61 5.61.8-.801-5.609-5.61 5.61-5.61\" fill-rule=\"evenodd\"></path></svg></span></button></div></div><span class=\"u-textAlignCenter u-relative u-background js-actionMultirecommendCount u-flexOrderNegative1 u-height20 u-marginBottom7\"><button class=\"button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-block u-marginAuto\" data-action=\"show-recommends\" data-action-value=\"384ef05f32b2\">937</button></span></div></li><li class=\"u-textAlignCenter u-marginVertical10\"><button class=\"button button--large button--dark button--chromeless is-touchIconBlackPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon\" title=\"Share on Twitter\" aria-label=\"Share on Twitter\" data-action=\"share-on-twitter\" data-action-source=\"post_share_widget\"><span class=\"svgIcon svgIcon--twitter svgIcon--29px\"><svg class=\"svgIcon-use\" width=\"29\" height=\"29\" viewBox=\"0 0 29 29\"><path d=\"M21.967 11.8c.018 5.93-4.607 11.18-11.177 11.18-2.172 0-4.25-.62-6.047-1.76l-.268.422-.038.5.186.013.168.012c.3.02.44.032.6.046 2.06-.026 3.95-.686 5.49-1.86l1.12-.85-1.4-.048c-1.57-.055-2.92-1.08-3.36-2.51l-.48.146-.05.5c.22.03.48.05.75.08.48-.02.87-.07 1.25-.15l2.33-.49-2.32-.49c-1.68-.35-2.91-1.83-2.91-3.55 0-.05 0-.01-.01.03l-.49-.1-.25.44c.63.36 1.35.57 2.07.58l1.7.04L7.4 13c-.978-.662-1.59-1.79-1.618-3.047a4.08 4.08 0 0 1 .524-1.8l-.825.07a12.188 12.188 0 0 0 8.81 4.515l.59.033-.06-.59v-.02c-.05-.43-.06-.63-.06-.87a3.617 3.617 0 0 1 6.27-2.45l.2.21.28-.06c1.01-.22 1.94-.59 2.73-1.09l-.75-.56c-.1.36-.04.89.12 1.36.23.68.58 1.13 1.17.85l-.21-.45-.42-.27c-.52.8-1.17 1.48-1.92 2L22 11l.016.28c.013.2.014.35 0 .52v.04zm.998.038c.018-.22.017-.417 0-.66l-.498.034.284.41a8.183 8.183 0 0 0 2.2-2.267l.97-1.48-1.6.755c.17-.08.3-.02.34.03a.914.914 0 0 1-.13-.292c-.1-.297-.13-.64-.1-.766l.36-1.254-1.1.695c-.69.438-1.51.764-2.41.963l.48.15a4.574 4.574 0 0 0-3.38-1.484 4.616 4.616 0 0 0-4.61 4.613c0 .29.02.51.08.984l.01.02.5-.06.03-.5c-3.17-.18-6.1-1.7-8.08-4.15l-.48-.56-.36.64c-.39.69-.62 1.48-.65 2.28.04 1.61.81 3.04 2.06 3.88l.3-.92c-.55-.02-1.11-.17-1.6-.45l-.59-.34-.14.67c-.02.08-.02.16 0 .24-.01 2.12 1.55 4.01 3.69 4.46l.1-.49-.1-.49c-.33.07-.67.12-1.03.14-.18-.02-.43-.05-.64-.07l-.76-.09.23.73c.57 1.84 2.29 3.14 4.28 3.21l-.28-.89a8.252 8.252 0 0 1-4.85 1.66c-.12-.01-.26-.02-.56-.05l-.17-.01-.18-.01L2.53 21l1.694 1.07a12.233 12.233 0 0 0 6.58 1.917c7.156 0 12.2-5.73 12.18-12.18l-.002.04z\"></path></svg></span></button></li><li class=\"u-textAlignCenter u-marginVertical10\"><button class=\"button button--large button--dark button--chromeless is-touchIconBlackPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon\" title=\"Share on Facebook\" aria-label=\"Share on Facebook\" data-action=\"share-on-facebook\" data-action-source=\"post_share_widget\"><span class=\"svgIcon svgIcon--facebook svgIcon--29px\"><svg class=\"svgIcon-use\" width=\"29\" height=\"29\" viewBox=\"0 0 29 29\"><path d=\"M16.39 23.61v-5.808h1.846a.55.55 0 0 0 .546-.48l.36-2.797a.551.551 0 0 0-.547-.62H16.39V12.67c0-.67.12-.813.828-.813h1.474a.55.55 0 0 0 .55-.55V8.803a.55.55 0 0 0-.477-.545c-.436-.06-1.36-.116-2.22-.116-2.5 0-4.13 1.62-4.13 4.248v1.513H10.56a.551.551 0 0 0-.55.55v2.797c0 .304.248.55.55.55h1.855v5.76c-4.172-.96-7.215-4.7-7.215-9.1 0-5.17 4.17-9.36 9.31-9.36 5.14 0 9.31 4.19 9.31 9.36 0 4.48-3.155 8.27-7.43 9.15M14.51 4C8.76 4 4.1 8.684 4.1 14.46c0 5.162 3.75 9.523 8.778 10.32a.55.55 0 0 0 .637-.543v-6.985a.551.551 0 0 0-.55-.55H11.11v-1.697h1.855a.55.55 0 0 0 .55-.55v-2.063c0-2.02 1.136-3.148 3.03-3.148.567 0 1.156.027 1.597.06v1.453h-.924c-1.363 0-1.93.675-1.93 1.912v1.78c0 .3.247.55.55.55h2.132l-.218 1.69H15.84c-.305 0-.55.24-.55.55v7.02c0 .33.293.59.623.54 5.135-.7 9.007-5.11 9.007-10.36C24.92 8.68 20.26 4 14.51 4\"></path></svg></span></button></li><li class=\"u-textAlignCenter u-marginVertical10\"><button class=\"button button--large button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton\" title=\"Bookmark this story to read later\" aria-label=\"Bookmark this story to read later\" data-action=\"sign-up-prompt\" data-sign-in-action=\"add-to-bookmarks\" data-requires-token=\"true\" data-redirect=\"https://medium.com/_/bookmark/p/384ef05f32b2\" data-action-source=\"post_share_widget-----384ef05f32b2---------------------bookmark_sidebar\"><span class=\"button-defaultState\"><span class=\"svgIcon svgIcon--bookmark svgIcon--29px\"><svg class=\"svgIcon-use\" width=\"29\" height=\"29\" viewBox=\"0 0 29 29\"><path d=\"M19.385 4h-9.77A2.623 2.623 0 0 0 7 6.615V23.01a1.022 1.022 0 0 0 1.595.847l5.905-4.004 5.905 4.004A1.022 1.022 0 0 0 22 23.011V6.62A2.625 2.625 0 0 0 19.385 4zM21 23l-5.91-3.955-.148-.107a.751.751 0 0 0-.884 0l-.147.107L8 23V6.615C8 5.725 8.725 5 9.615 5h9.77C20.275 5 21 5.725 21 6.615V23z\" fill-rule=\"evenodd\"></path></svg></span></span><span class=\"button-activeState\"><span class=\"svgIcon svgIcon--bookmarkFilled svgIcon--29px\"><svg class=\"svgIcon-use\" width=\"29\" height=\"29\" viewBox=\"0 0 29 29\"><path d=\"M19.385 4h-9.77A2.623 2.623 0 0 0 7 6.615V23.01a1.022 1.022 0 0 0 1.595.847l5.905-4.004 5.905 4.004A1.022 1.022 0 0 0 22 23.011V6.62A2.625 2.625 0 0 0 19.385 4z\" fill-rule=\"evenodd\"></path></svg></span></span></button></li></ul></div></aside><div class=\"postActionsBar uiScale uiScale-ui--regular uiScale-caption--regular js-postActionsBar is-visible\"><div class=\"postActionsBar-container container\"><div class=\"postActionsBar-content row js-postActionsBarContent\"><div class=\"openInAppButton js-openInAppButton\"><button class=\"button button--primary button--filled button--withChrome u-accentColor--buttonNormal u-fontWeightSemibold u-paddingHorizontal10\" data-action=\"open-native\" data-action-target=\"android-app://com.medium.reader/https/medium.com/p/384ef05f32b2\" data-action-source=\"post_actions_bar\">Open in app</button></div></div></div></div><style class=\"js-collectionStyle\">\n.u-accentColor--borderLight {border-color: #02B875 !important;}\n.u-accentColor--borderNormal {border-color: #02B875 !important;}\n.u-accentColor--borderDark {border-color: #1C9963 !important;}\n.u-accentColor--iconLight .svgIcon,.u-accentColor--iconLight.svgIcon {fill: #02B875 !important;}\n.u-accentColor--iconNormal .svgIcon,.u-accentColor--iconNormal.svgIcon {fill: #02B875 !important;}\n.u-accentColor--iconDark .svgIcon,.u-accentColor--iconDark.svgIcon {fill: #1C9963 !important;}\n.u-accentColor--textNormal {color: #1C9963 !important;}\n.u-accentColor--hoverTextNormal:hover {color: #1C9963 !important;}\n.u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #1C9963 !important;}\n.u-accentColor--textDark {color: #1C9963 !important;}\n.u-accentColor--backgroundLight {background-color: #02B875 !important;}\n.u-accentColor--backgroundNormal {background-color: #02B875 !important;}\n.u-accentColor--backgroundDark {background-color: #1C9963 !important;}\n.u-accentColor--buttonDark {border-color: #1C9963 !important; color: #1C9963 !important;}\n.u-accentColor--buttonDark:hover {border-color: #1C9963 !important;}\n.u-accentColor--buttonDark .icon:before,.u-accentColor--buttonDark .svgIcon{color: #1C9963 !important; fill: #1C9963 !important;}\n.u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #02B875 !important; color: #1C9963 !important;}\n.u-accentColor--buttonNormal:hover {border-color: #1C9963 !important;}\n.u-accentColor--buttonNormal .icon:before,.u-accentColor--buttonNormal .svgIcon{color: #02B875 !important; fill: #02B875 !important;}\n.u-accentColor--buttonNormal.button--filled .icon:before,.u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;}\n.u-accentColor--buttonDark.button--filled,.u-accentColor--buttonDark.button--withChrome.is-active,.u-accentColor--fillWhenActive.is-active {background-color: #1C9963 !important; border-color: #1C9963 !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;}\n.u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #02B875 !important; border-color: #02B875 !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;}\n.postArticle.is-withAccentColors .markup--user,.postArticle.is-withAccentColors .markup--query {color: #1C9963 !important;}\n.u-accentColor--highlightFaint {background-color: rgba(233, 253, 240, 1) !important;}\n.u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(125, 255, 179, 1) !important;}\n.postArticle.is-withAccentColors .markup--quote.is-other {background-color: rgba(233, 253, 240, 1) !important;}\nbody.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(233, 253, 240, 1), rgba(233, 253, 240, 1));}\n.postArticle.is-withAccentColors .markup--quote.is-me {background-color: rgba(173, 255, 207, 1) !important;}\nbody.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(173, 255, 207, 1), rgba(173, 255, 207, 1));}\n.postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: rgba(125, 255, 179, 1) !important;}\nbody.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(125, 255, 179, 1), rgba(125, 255, 179, 1));}\n.postArticle.is-withAccentColors .markup--quote.is-selected {background-color: rgba(125, 255, 179, 1) !important;}\nbody.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(125, 255, 179, 1), rgba(125, 255, 179, 1));}\n.postArticle.is-withAccentColors .markup--highlight {background-color: rgba(125, 255, 179, 1) !important;}\nbody.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(125, 255, 179, 1), rgba(125, 255, 179, 1));}.u-baseColor--iconNormal.avatar-halo {fill: rgba(0, 0, 0, 0.4980392156862745) !important;}</style><style class=\"js-collectionStyleConstant\">.u-imageBgColor {background-color: rgba(0, 0, 0, 0.24705882352941178);}\n.u-imageSpectrum .u-baseColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;}\n.u-imageSpectrum .u-baseColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;}\n.u-imageSpectrum .u-baseColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-baseColor--iconLight .svgIcon,.u-imageSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;}\n.u-imageSpectrum .u-baseColor--iconNormal .svgIcon,.u-imageSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-baseColor--iconDark .svgIcon,.u-imageSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-baseColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-baseColor--textDark {color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-baseColor--textDarker {color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-baseColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;}\n.u-imageSpectrum .u-baseColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-baseColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-baseColor--buttonLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important; color: rgba(255, 255, 255, 0.8) !important;}\n.u-imageSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;}\n.u-imageSpectrum .u-baseColor--buttonLight .icon:before,.u-imageSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;}\n.u-imageSpectrum .u-baseColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-baseColor--buttonDark .icon:before,.u-imageSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-baseColor--buttonNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-baseColor--buttonNormal .icon:before,.u-imageSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-baseColor--buttonDark.button--filled,.u-imageSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;}\n.u-imageSpectrum .u-baseColor--buttonNormal.button--filled,.u-imageSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;}\n.u-imageSpectrum .u-baseColor--link {color: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-baseColor--link.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--darken:active {color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-baseColor--link.link--dark {color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-baseColor--link.link--darker {color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.8);}\n.u-imageSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(255, 255, 255, 0.8);}\n.u-imageSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(255, 255, 255, 0.8);}\n.u-imageSpectrum .svgIcon--logoNew path:nth-child(1) {stroke: none !important; fill: rgba(255, 255, 255, 0.4) !important;}\n.u-imageSpectrum .svgIcon--logoNew path:nth-child(2) {stroke: none !important; fill: rgba(255, 255, 255, 0.4980392156862745) !important;}\n.u-imageSpectrum .svgIcon--logoNew path:nth-child(3) {stroke: none !important; fill: rgba(255, 255, 255, 0.6980392156862745) !important;}\n.u-imageSpectrum .svgIcon--logoNew path:nth-child(4) {stroke: none !important; fill: rgba(255, 255, 255, 0.8980392156862745) !important;}\n.u-imageSpectrum .svgIcon--logoWordmark {stroke: none !important; fill: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .svgIcon--logoMonogram {stroke: none !important; fill: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum  .ui-h1,.u-imageSpectrum  .ui-h2,.u-imageSpectrum  .ui-h3,.u-imageSpectrum  .ui-h4,.u-imageSpectrum  .ui-brand1,.u-imageSpectrum  .ui-brand2,.u-imageSpectrum  .ui-captionStrong {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum  .ui-body,.u-imageSpectrum  .ui-caps {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum  .ui-summary,.u-imageSpectrum  .ui-caption {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;}\n.u-imageSpectrum .u-accentColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;}\n.u-imageSpectrum .u-accentColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;}\n.u-imageSpectrum .u-accentColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-accentColor--iconLight .svgIcon,.u-imageSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;}\n.u-imageSpectrum .u-accentColor--iconNormal .svgIcon,.u-imageSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-accentColor--iconDark .svgIcon,.u-imageSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-accentColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-accentColor--textDark {color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-accentColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;}\n.u-imageSpectrum .u-accentColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-accentColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-accentColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-accentColor--buttonDark .icon:before,.u-imageSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;}\n.u-imageSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-accentColor--buttonNormal .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;}\n.u-imageSpectrum .u-accentColor--buttonDark.button--filled,.u-imageSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-imageSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;}\n.u-imageSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-imageSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;}\n.u-imageSpectrum .postArticle.is-withAccentColors .markup--user,.u-imageSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(255, 255, 255, 0.9490196078431372) !important;}\n.u-imageSpectrum .u-accentColor--highlightFaint {background-color: rgba(255, 255, 255, 0.2) !important;}\n.u-imageSpectrum .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(255, 255, 255, 0.6) !important;}\n.postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: rgba(255, 255, 255, 0.2) !important;}\nbody.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2));}\n.postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: rgba(255, 255, 255, 0.4) !important;}\nbody.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.4));}\n.postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: rgba(255, 255, 255, 0.6) !important;}\nbody.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));}\n.postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: rgba(255, 255, 255, 0.6) !important;}\nbody.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));}\n.postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: rgba(255, 255, 255, 0.6) !important;}\nbody.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));}.u-resetSpectrum .u-tintBgColor {background-color: rgba(255, 255, 255, 1) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%) !important;}\n.u-resetSpectrum .u-baseColor--borderLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;}\n.u-resetSpectrum .u-baseColor--borderNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important;}\n.u-resetSpectrum .u-baseColor--borderDark {border-color: rgba(0, 0, 0, 0.6) !important;}\n.u-resetSpectrum .u-baseColor--iconLight .svgIcon,.u-resetSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(0, 0, 0, 0.2980392156862745) !important;}\n.u-resetSpectrum .u-baseColor--iconNormal .svgIcon,.u-resetSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(0, 0, 0, 0.4980392156862745) !important;}\n.u-resetSpectrum .u-baseColor--iconDark .svgIcon,.u-resetSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(0, 0, 0, 0.6) !important;}\n.u-resetSpectrum .u-baseColor--textNormal {color: rgba(0, 0, 0, 0.4980392156862745) !important;}\n.u-resetSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(0, 0, 0, 0.6) !important;}\n.u-resetSpectrum .u-baseColor--textDark {color: rgba(0, 0, 0, 0.6) !important;}\n.u-resetSpectrum .u-baseColor--textDarker {color: rgba(0, 0, 0, 0.8) !important;}\n.u-resetSpectrum .u-baseColor--backgroundLight {background-color: rgba(0, 0, 0, 0.09803921568627451) !important;}\n.u-resetSpectrum .u-baseColor--backgroundNormal {background-color: rgba(0, 0, 0, 0.2) !important;}\n.u-resetSpectrum .u-baseColor--backgroundDark {background-color: rgba(0, 0, 0, 0.2980392156862745) !important;}\n.u-resetSpectrum .u-baseColor--buttonLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(0, 0, 0, 0.2980392156862745) !important;}\n.u-resetSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;}\n.u-resetSpectrum .u-baseColor--buttonLight .icon:before,.u-resetSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;}\n.u-resetSpectrum .u-baseColor--buttonDark {border-color: rgba(0, 0, 0, 0.6) !important; color: rgba(0, 0, 0, 0.6) !important;}\n.u-resetSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(0, 0, 0, 0.8) !important;}\n.u-resetSpectrum .u-baseColor--buttonDark .icon:before,.u-resetSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;}\n.u-resetSpectrum .u-baseColor--buttonNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important; color: rgba(0, 0, 0, 0.4980392156862745) !important;}\n.u-resetSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(0, 0, 0, 0.6) !important;}\n.u-resetSpectrum .u-baseColor--buttonNormal .icon:before,.u-resetSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(0, 0, 0, 0.4980392156862745) !important; fill: rgba(0, 0, 0, 0.4980392156862745) !important;}\n.u-resetSpectrum .u-baseColor--buttonDark.button--filled,.u-resetSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2980392156862745) !important; border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;}\n.u-resetSpectrum .u-baseColor--buttonNormal.button--filled,.u-resetSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2) !important; border-color: rgba(0, 0, 0, 0.2) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;}\n.u-resetSpectrum .u-baseColor--link {color: rgba(0, 0, 0, 0.4980392156862745) !important;}\n.u-resetSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(0, 0, 0, 0.6) !important;}\n.u-resetSpectrum .u-baseColor--link.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--darken:active {color: rgba(0, 0, 0, 0.6) !important;}\n.u-resetSpectrum .u-baseColor--link.link--dark {color: rgba(0, 0, 0, 0.6) !important;}\n.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(0, 0, 0, 0.8) !important;}\n.u-resetSpectrum .u-baseColor--link.link--darker {color: rgba(0, 0, 0, 0.8) !important;}\n.u-resetSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);}\n.u-resetSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);}\n.u-resetSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);}\n.u-resetSpectrum .svgIcon--logoNew path:nth-child(1) {stroke: none !important; fill: rgba(0, 0, 0, 0.2) !important;}\n.u-resetSpectrum .svgIcon--logoNew path:nth-child(2) {stroke: none !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;}\n.u-resetSpectrum .svgIcon--logoNew path:nth-child(3) {stroke: none !important; fill: rgba(0, 0, 0, 0.4) !important;}\n.u-resetSpectrum .svgIcon--logoNew path:nth-child(4) {stroke: none !important; fill: rgba(0, 0, 0, 0.4980392156862745) !important;}\n.u-resetSpectrum .svgIcon--logoWordmark {stroke: none !important; fill: rgba(0, 0, 0, 0.6) !important;}\n.u-resetSpectrum .svgIcon--logoMonogram {stroke: none !important; fill: rgba(0, 0, 0, 0.6) !important;}\n.u-resetSpectrum  .ui-h1,.u-resetSpectrum  .ui-h2,.u-resetSpectrum  .ui-h3,.u-resetSpectrum  .ui-h4,.u-resetSpectrum  .ui-brand1,.u-resetSpectrum  .ui-brand2,.u-resetSpectrum  .ui-captionStrong {color: rgba(0, 0, 0, 0.8) !important; fill: rgba(0, 0, 0, 0.8) !important;}\n.u-resetSpectrum  .ui-body,.u-resetSpectrum  .ui-caps {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;}\n.u-resetSpectrum  .ui-summary,.u-resetSpectrum  .ui-caption {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;}\n.u-resetSpectrum .u-accentColor--borderLight {border-color: rgba(2, 184, 117, 1) !important;}\n.u-resetSpectrum .u-accentColor--borderNormal {border-color: rgba(2, 184, 117, 1) !important;}\n.u-resetSpectrum .u-accentColor--borderDark {border-color: rgba(0, 171, 107, 1) !important;}\n.u-resetSpectrum .u-accentColor--iconLight .svgIcon,.u-resetSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(2, 184, 117, 1) !important;}\n.u-resetSpectrum .u-accentColor--iconNormal .svgIcon,.u-resetSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(0, 171, 107, 1) !important;}\n.u-resetSpectrum .u-accentColor--iconDark .svgIcon,.u-resetSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(28, 153, 99, 1) !important;}\n.u-resetSpectrum .u-accentColor--textNormal {color: rgba(0, 171, 107, 1) !important;}\n.u-resetSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(0, 171, 107, 1) !important;}\n.u-resetSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(28, 153, 99, 1) !important;}\n.u-resetSpectrum .u-accentColor--textDark {color: rgba(28, 153, 99, 1) !important;}\n.u-resetSpectrum .u-accentColor--backgroundLight {background-color: rgba(2, 184, 117, 1) !important;}\n.u-resetSpectrum .u-accentColor--backgroundNormal {background-color: rgba(0, 171, 107, 1) !important;}\n.u-resetSpectrum .u-accentColor--backgroundDark {background-color: rgba(28, 153, 99, 1) !important;}\n.u-resetSpectrum .u-accentColor--buttonDark {border-color: rgba(0, 171, 107, 1) !important; color: rgba(28, 153, 99, 1) !important;}\n.u-resetSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(28, 153, 99, 1) !important;}\n.u-resetSpectrum .u-accentColor--buttonDark .icon:before,.u-resetSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(28, 153, 99, 1) !important; fill: rgba(28, 153, 99, 1) !important;}\n.u-resetSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(2, 184, 117, 1) !important; color: rgba(0, 171, 107, 1) !important;}\n.u-resetSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(0, 171, 107, 1) !important;}\n.u-resetSpectrum .u-accentColor--buttonNormal .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(0, 171, 107, 1) !important; fill: rgba(0, 171, 107, 1) !important;}\n.u-resetSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;}\n.u-resetSpectrum .u-accentColor--buttonDark.button--filled,.u-resetSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-resetSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(28, 153, 99, 1) !important; border-color: rgba(28, 153, 99, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;}\n.u-resetSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-resetSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(0, 171, 107, 1) !important; border-color: rgba(0, 171, 107, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;}\n.u-resetSpectrum .postArticle.is-withAccentColors .markup--user,.u-resetSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(0, 171, 107, 1) !important;}</style></div></div></div><div class=\"loadingBar\"></div><!-- START Parse.ly Include: Standard --><div id=\"parsely-root\" style=\"display: none\"><span id=\"parsely-cfg\" data-parsely-site=\"medium.com\"></span></div><!-- END Parse.ly Include: Standard --><div class=\"surface-scrollOverlay\"></div></body></html>",
            "contentTextLength": 197691,
            "href": "https://journal.artfuldev.com/unit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2",
            "mutations": {
                "baseAdded": false,
                "cleanupBase": {
                    "baseAdded": true,
                    "existingBaseRemoved": false
                },
                "cleanupHead": {
                    "headAdded": false
                },
                "cleanupRemoveScripts": {
                    "scriptsRemoved": 16
                },
                "eventAttributesRemoved": 0,
                "existingBaseRemoved": false,
                "javascriptAnchorsRemoved": 0,
                "showAriaHidden": 0
            },
            "scrollBox": {
                "height": 0,
                "width": 0
            },
            "scrollHeight": 0,
            "title": "Unit testing node applications with TypeScript — using mocha and chai",
            "url": "https://journal.artfuldev.com/unit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2"
        }
    },
    "title": "Unit testing node applications with TypeScript — using mocha and chai",
    "type": "phz",
    "url": "https://journal.artfuldev.com/unit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2",
    "version": "3.0.0",
    "browser": {
        "inactive": false,
        "type": "phone",
        "title": "MOBILE_GALAXY_S8_WITH_CHROME_61_WIDTH_750",
        "name": "MOBILE_GALAXY_S8_WITH_CHROME_61_WIDTH_750",
        "description": "Galaxy S8 mobile device running Chrome 61 but with width at 750",
        "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Mobile Safari/537.36",
        "deviceEmulation": {
            "screenPosition": "mobile",
            "screenSize": {
                "width": 750,
                "height": 970
            },
            "viewSize": {
                "width": 750,
                "height": 970
            }
        }
    }
};

